Вести с полей. Знакомимся 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
Я думаю, какие-либо дополнительные комментарии здесь будут лишними. 🙂
Ну только если — останавливаться на достигнутом пока не собираемся.
Официальный выпуск нового релиза — будет в первой половине этого месяца. Я искренне в это верю.