Publish date: 2003-01-05

Updatable recorset. Testing of query pool (VB)

'CREATE DOMAIN T_INTEGER
' AS INTEGER;
'
'CREATE GENERATOR GEN_ID_TEST_QUERY_POOL_TABLE;
'
'CREATE TABLE TEST_QUERY_POOL_TABLE
'(
'  TEST_ID   T_INTEGER NOT NULL,
'  A0        T_INTEGER,
'  A1        T_INTEGER,
'  A2        T_INTEGER,
'  A3        T_INTEGER,
'  A4        T_INTEGER,
'  A5        T_INTEGER,
'  A6        T_INTEGER,
'  A7        T_INTEGER,
'  A8        T_INTEGER,
'  A9        T_INTEGER,
'
'  PRIMARY KEY (TEST_ID)
');

Sub sample7_4()
 Const table_name       As String = "test_query_pool_table"
 Const col_prefix       As String = "A"
 Const col_first_num    As Long = 0
 Const col_count        As Long = 10
 Const table_size       As Long = 500

 Dim cn As New ADODB.Connection

 cn.Open "provider=LCPI.IBProvider;data source=main:e:\database\ibp_test.gdb;ctype=win1251", "gamer", "vermut"

 Debug.Print "Provider Version:" & cn.Properties("provider version")

 cn.BeginTrans

 Dim rs As New ADODB.Recordset
 rs.ActiveConnection = cn

 'INSERT - GEN KEY RULE
 rs.Properties("auto_gen_key_rule") = "GEN_N.GEN_ID_TEST_QUERY_POOL_TABLE.TEST_ID"

 'INSERT - ENUM ONLY MODIFIED FIELDS
 rs.Properties("auto_insert_field_rule") = 1

 'UPDATE  -ENUM ONLY MODIFIED FIELDS
 rs.Properties("auto_update_field_rule") = 1

 'BUILD TEST TABLE
 rs.Open table_name, , adOpenKeyset, adLockBatchOptimistic, adCmdTable

 'clear table
 While (Not rs.EOF)
  'Debug.Print CStr(rs("test_id"))
  rs.Delete
  rs.MoveNext
 Wend

 Dim i As Long

 'insert records
 For i = 0 To table_size - 1
  rs.AddNew 'IBProvider will be generate TEST_ID field
 Next i

 'APPLY ALL CHANGES
 rs.UpdateBatch

 rs.Close

 'query_pool_size=0..9
 Dim times(0 To col_count + 2) As Date

 Dim query_pool_size As Long
 Dim col_num As Long
 Dim start_time As Date

 For query_pool_size = LBound(times) To UBound(times)
  rs.Properties("query_pool_size") = query_pool_size

  rs.Open table_name, , adOpenKeyset, adLockOptimistic

  'load all records
  If (Not rs.EOF) Then rs.MoveLast

  'restart
  If (Not rs.EOF) Then rs.MoveFirst

  start_time = Time

  While Not rs.EOF
   For col_num = col_first_num To col_first_num + col_count - 1
    rs(col_prefix + CStr(col_num)) = col_num
    rs.Update ' UPDATE SINGLE COLUMN
   Next col_num

   rs.MoveNext
  Wend

  times(query_pool_size) = Time - start_time

  Debug.Print CStr(query_pool_size) & ":  " & CStr(times(query_pool_size))

  rs.Close
 Next query_pool_size

 cn.CommitTrans

End Sub 'sample7_4