Вести с полей. Знакомимся c IBP v3.3.
Сегодня завершено кодирование нового выпуска провайдера — 3.3. Точнее оно было закончено вчера. Но сегодня, созерцая в «Process Explorer» отрицательное значение «Page Faults» у fb_inet_server.exe, решил не наступать на эти грабли с переполнением. Ну и, в результате, внес еще пару улучшений в код. Итак.
Благодаря последним изменениям в коде, стало возможным выполнение вот таких вот вещей:
option explicit dim cn set cn=createobject("ADODB.Connection") cn.Provider="LCPI.IBProvider.3" call cn.Open("location=localhost:d:\database\employee.fdb;ctype=win1251",_ "SYSDBA","masterkey") wscript.echo "DBMS Name :"&cstr(cn.Properties("DBMS Name").Value) wscript.echo "DBMS Version :"&cstr(cn.Properties("DBMS Version").Value) wscript.echo "Provider Version:"&cstr(cn.Properties("Provider Version").Value) wscript.echo "" dim script script= _ " set autoddl on;"&vbCrLf& _ " set transaction;"&vbCrLf& _ " create generator GEN_ID_TEST_TABLE;"&vbCrLf& _ " create table TEST_TABLE"&vbCrLf& _ " (ID INTEGER NOT NULL PRIMARY KEY,TEXT BLOB SUB_TYPE TEXT);"&vbCrLf& _ " create trigger BI_TEST_TABLE for TEST_TABLE"&vbCrLf& _ " before insert"&vbCrLf& _ " as"&vbCrLf& _ " begin"&vbCrLf& _ " if(NEW.ID IS NULL) then"&vbCrLf& _ " NEW.ID=GEN_ID(GEN_ID_TEST_TABLE,1);"&vbCrLf& _ " end;"&vbCrLf& _ " insert into TEST_TABLE (text) values('record 1');"&vbCrLf& _ " insert into TEST_TABLE (text) values('record 2');"&vbCrLf& _ " set term !!;"&vbCrLf& _ " select * from TEST_TABLE!!"&vbCrLf& _ " set terminator ;!!"&vbCrLf& _ " set autoddl off;"&vbCrLf& _ " drop table TEST_TABLE;"&vbCrLf& _ " drop generator GEN_ID_TEST_TABLE;"&vbCrLf& _ " commit;" wscript.echo script dim ra dim rs set rs=cn.Execute(script,ra) dim n n=0 dim nRecs dim iCol do while(not (rs is nothing)) n=n+1 wscript.echo "---------- "&cstr(n) wscript.echo "rows_affected:"&cstr(ra) if(rs.State=0)then 'adStateClosed wscript.echo "no recordset" else nRecs=0 while(not rs.eof) nRecs=nRecs+1 for iCol=0 to rs.Fields.count-1 wscript.echo " ["&rs(iCol).Name&"]="&cstr_sn(rs(iCol).Value) next 'iCol wscript.echo "" call rs.MoveNext() wend wscript.echo "record count: "&cstr(nRecs) end if '---- set rs=rs.NextRecordset(ra) loop wscript.echo "" wscript.echo "----------" wscript.echo "total results: "&cstr(n) '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ private function cstr_sn(s) if(IsNull(s))then cstr_sn="#NULL#" elseif(IsEmpty(s))then cstr_sn="#EMPTY#" elseif(IsArray(s))then cstr_sn="#ARRAY#" else cstr_sn=cstr(s) end if end function 'cstr_sn '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
На выходе получается следующее:
DBMS Name :Firebird
DBMS Version :2.5.0.26089
Provider Version:3.3.0.11104set autoddl on;
set transaction;
create generator GEN_ID_TEST_TABLE;
create table TEST_TABLE
(ID INTEGER NOT NULL PRIMARY KEY,TEXT BLOB SUB_TYPE TEXT);
create trigger BI_TEST_TABLE for TEST_TABLE
before insert
as
begin
if(NEW.ID IS NULL) then
NEW.ID=GEN_ID(GEN_ID_TEST_TABLE,1);
end;
insert into TEST_TABLE (text) values(‘record 1’);
insert into TEST_TABLE (text) values(‘record 2’);
set term !!;
select * from TEST_TABLE!!
set terminator ;!!
set autoddl off;
drop table TEST_TABLE;
drop generator GEN_ID_TEST_TABLE;
commit;
———- 1
rows_affected:-1
no recordset
———- 2
rows_affected:-1
no recordset
———- 3
rows_affected:-1
no recordset
———- 4
rows_affected:-1
no recordset
———- 5
rows_affected:1
no recordset
———- 6
rows_affected:1
no recordset
———- 7
rows_affected:-1[ID]=1
[TEXT]=record 1[ID]=2
[TEXT]=record 2record count: 2
———- 8
rows_affected:-1
no recordset
———- 9
rows_affected:-1
no recordset
———- 10
rows_affected:-1
no recordset
———-
total results: 10
Я думаю, какие-либо дополнительные комментарии здесь будут лишними. 🙂
Ну только если — останавливаться на достигнутом пока не собираемся.
Официальный выпуск нового релиза — будет в первой половине этого месяца. Я искренне в это верю.