IBProvider v3.8.2. А ваши компоненты доступа готовы для Firebird v3?
Мы продолжаем активно добавлять в IBProvider новую функциональность СУБД Firebird 3.
Напомним, что еще 2 месяца назад мы добавили поддержку типа данных BOOLEAN из Firebird 3. В новой версии IBProvider Professional добавлена поддержка инструкции PACKAGE.
Отныне вы сможете привести в порядок огромную кучу процедур и функций БД и сгруппировать их по смыслу в отдельных модулях (PACKAGE). Такая организация значительно упростит понимание и облегчит сопровождение SQL-кода.
Firebird 3 — инструкция PACKAGE
C IBProvider вы можете использовать в своих программах следующие возможности PACKAGE:
- Выполнение DDL запросов для создания, модификации и удаления PACKAGE.
- Вызов хранимых процедур из PACKAGE в запросах «exec SP …», «{call SP …}»
Пример на VBScript
option explicit
dim cn
set cn=createobject("ADODB.Connection")
cn.Provider="LCPI.IBProvider.3"
cn.Properties("location")="vxpsp2-fb30:e:\database\ibp_test_fb30_d3.gdb"
cn.Properties("user id")="sysdba"
cn.Properties("password")="masterkey"
cn.Properties("dbclient_library")="fbclient_30.dll"
cn.Properties("ctype")="win1251" ' This is RUSSIAN code page!
cn.Properties("auto_commit")=true
cn.Properties("exec_sp_named_param")=true
call cn.Open("")
wscript.echo "Provider Version: "&cn.Properties("Provider Version").Value
wscript.echo "DBMS Name : "&cn.Properties("DBMS Name").Value
wscript.echo "DBMS Version : "&cn.Properties("DBMS Version").Value
wscript.echo ""
'----------------
dim cmd
dim rs
set cmd=createobject("ADODB.Command")
cmd.ActiveConnection=cn
'----------------
wscript.echo "create packages"
cmd.CommandText = _
"recreate package test_pack1 as"&vbCrLf& _
"begin"&vbCrLf& _
" procedure proc(in1 integer)"&vbCrLf& _
" returns (out1 integer);"&vbCrLf& _
"end;"&vbCrLf& _
""&vbCrLf& _
"recreate package body test_pack1 as"&vbCrLf& _
"begin"&vbCrLf& _
" procedure proc(in1 integer)"&vbCrLf& _
" returns (out1 integer)"&vbCrLf& _
" as"&vbCrLf& _
" begin"&vbCrLf& _
" out1=-in1;"&vbCrLf& _
" end;"&vbCrLf& _
"end;"&vbCrLf& _
""&vbCrLf& _
"recreate package test_pack2 as"&vbCrLf& _
"begin"&vbCrLf& _
" procedure proc(in1_str varchar(64) character set ascii)"&vbCrLf& _
" returns (out1_str varchar(64) character set ascii);"&vbCrLf& _
"end;"&vbCrLf& _
""&vbCrLf& _
"recreate package body test_pack2 as"&vbCrLf& _
"begin"&vbCrLf& _
" procedure proc(in1_str varchar(64) character set ascii)"&vbCrLf& _
" returns (out1_str varchar(64) character set ascii)"&vbCrLf& _
" as"&vbCrLf& _
" begin"&vbCrLf& _
" out1_str=upper(in1_str);"&vbCrLf& _
" suspend;"&vbCrLf& _
" end;"&vbCrLf& _
"end;"&vbCrLf& _
""&vbCrLf& _
"recreate procedure proc"&vbCrLf& _
"returns (x integer)"&vbCrLf& _
"as"&vbCrLf& _
"begin"&vbCrLf& _
"x=1234;"&vbCrLf& _
"end;"
set rs=cmd.Execute()
'check errors
while(not (rs is nothing))
set rs=rs.NextRecordset()
wend
wscript.echo ""
'----------------
wscript.echo "exec test_pack1.proc"
cmd.CommandText="exec test_pack1.proc"
cmd("in1")=2
call cmd.Execute()
wscript.echo "out1: "&cstr(cmd("out1").value)
wscript.echo ""
'----------------
wscript.echo "exec test_pack2.proc"
cmd.CommandText="exec test_pack2.proc"
cmd("in1_str")="qwerty"
set rs=cmd.Execute()
wscript.echo "out1_str: """&rs("out1_str").value&""""
wscript.echo ""
set rs=nothing
'----------------
wscript.echo "exec proc"
cmd.CommandText="exec proc"
call cmd.Parameters.Refresh()
call cmd.Execute()
wscript.echo "x: "&cstr(cmd("x").value)
wscript.echo ""
'----------------
wscript.echo "OK"
Результат работы:
Новая версия IBProvider стала еще стабильнее и быстрее
С каждым новым релизом IBProvider мы увеличиваем количество тестов и комбинаций, входящих в нашу тестовую систему.
В новом релизе была исправлена ошибка вида:
Проблема проявляется на наборах рядов, размер записи которых больше 4K, при интенсивном изменении значений колонок. Ошибка присутствует во всех сборках IBProvider v3, начиная с RC5. Исправление доступно начиная с версии 3.8.1.
В процессе реализации новой функциональности в IBProvider, обязательный этап – предварительный рефакторинг существующего кода. В этот раз удалось сократить количество служебных запросов к серверу в процессе подготовки нестандартных запросов для выполнения хранимых процедур: «exec SP …», «{call SP …}»
В ближайших планах перевод 64-битных сборок IBProvider на Visual Studio 2010.
В итоге
Год назад мы подошли к финишной черте третьей версии IBProvider. Потом мы пересекли её и, не останавливаясь ни на один день, двинулись дальше. Сейчас мы предлагаем вам поддержку всей линейки серверов Firebird и InterBase, а так же функциональность, о которой не мечтали в самых смелых мечтах. Спасибо всем, кто остался с нами и присоединился к нам совсем недавно.

