
// Concurrency tests. Threads[2-8] wait (semaphore) until they receive a
// signal. Thread1 creates the db and adds a table to it. It then signals the
// other threads and all eight threads write integer, real, and text data
// to the table.
[Thread1]
WaitB0=7
Delete1=C:\Concurrent.db
ExpectedError1=KErrNotFound
Create2=C:\Concurrent.db
Exec3=Create Table Con( Someint int primary key, Somereal real, Sometext text);
Prepare4=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText);
// Wake up the other threads, we're doing the next bit concurrently.
SignalA5=7

Function6=WriteBigTable
EventuallyExpectedError=KErrNone
LowCount=0
HighCount=64
CountStep=8
Multiplier=2.81
Text=Thread1
St_Close7=
Close8=
WaitB9=7
EndBlock10=

[Thread2]
SignalB0=1
WaitA1=1
Open2=C:\Concurrent.db
Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText);
Function4=WriteBigTable
EventuallyExpectedError=KErrNone
LowCount=1
HighCount=65
CountStep=8
Multiplier=-1.121
Text=Thread2
St_Close5=
Close6=
SignalB7=1
EndBlock8=

[Thread3]
SignalB0=1
WaitA1=1
Open2=C:\Concurrent.db
Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText);
Function4=WriteBigTable
EventuallyExpectedError=KErrNone
LowCount=2
HighCount=66
CountStep=8
Multiplier=4.8e-21
Text=Thread3
St_Close5=
Close6=
SignalB7=1
EndBlock8=

[Thread4]
SignalB0=1
WaitA1=1
Open2=C:\Concurrent.db
Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText);
Function4=WriteBigTable
EventuallyExpectedError=KErrNone
LowCount=3
HighCount=67
CountStep=8
Multiplier=3.141592654
Text=Thread4
St_Close5=
Close6=
SignalB7=1
EndBlock8=

[Thread5]
SignalB0=1
WaitA1=1
Open2=C:\Concurrent.db
Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText);
Function4=WriteBigTable
EventuallyExpectedError=KErrNone
LowCount=4
HighCount=68
CountStep=8
Multiplier=2.81
Text=Thread5
St_Close5=
Close6=
SignalB7=1
EndBlock8=

[Thread6]
SignalB0=1
WaitA1=1
Open2=C:\Concurrent.db
Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText);
Function4=WriteBigTable
EventuallyExpectedError=KErrNone
LowCount=5
HighCount=69
CountStep=8
Multiplier=-1.121
Text=Thread6
St_Close5=
Close6=
SignalB7=1
EndBlock8=

[Thread7]
SignalB0=1
WaitA1=1
Open2=C:\Concurrent.db
Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText);
Function4=WriteBigTable
EventuallyExpectedError=KErrNone
LowCount=6
HighCount=70
CountStep=8
Multiplier=4.8e-21
Text=Thread7
St_Close5=
Close6=
SignalB7=1
EndBlock8=

[Thread8]
SignalB0=1
WaitA1=1
Open2=C:\Concurrent.db
Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText);
Function4=WriteBigTable
EventuallyExpectedError=KErrNone
LowCount=7
HighCount=71
CountStep=8
Multiplier=3.141592654
Text=Thread8
St_Close5=
Close6=
SignalB7=1
EndBlock8=

// The following 8 blocks check the content written by the threads above.
// These are entirely independent of each other and therefore do not require
// use of the semaphores.

[Check1]
Open0=C:\Concurrent.db
Prepare1=select * from Con where(Sometext="Thread1");
Next2=KSqlAtRow
ExpectedError2=KSqlAtRow
NoOperation3=

Function4=ReadBigTable
EventuallyExpectedError=KErrNone
LowCount=0
HighCount=64
CountStep=8
Multiplier=2.81
Text=Thread1
AtRow5=False
St_Close6=
Close7=
EndBlock8=

[Check2]
Open0=C:\Concurrent.db
Prepare1=select * from Con where(Sometext="Thread2");
Next2=KSqlAtRow
ExpectedError2=KSqlAtRow
NoOperation3=

Function4=ReadBigTable
EventuallyExpectedError=KErrNone
LowCount=1
HighCount=65
CountStep=8
Multiplier=-1.121
Text=Thread2
AtRow5=False
St_Close6=
Close7=
EndBlock8=

[Check3]
Open0=C:\Concurrent.db
Prepare1=select * from Con where(Sometext="Thread3");
Next2=KSqlAtRow
ExpectedError2=KSqlAtRow
NoOperation3=

Function4=ReadBigTable
EventuallyExpectedError=KErrNone
LowCount=2
HighCount=66
CountStep=8
Multiplier=4.8e-21
Text=Thread3
AtRow5=False
St_Close6=
Close7=
EndBlock8=

[Check4]
Open0=C:\Concurrent.db
Prepare1=select * from Con where(Sometext="Thread4");
Next2=KSqlAtRow
ExpectedError2=KSqlAtRow
NoOperation3=

Function4=ReadBigTable
EventuallyExpectedError=KErrNone
LowCount=3
HighCount=67
CountStep=8
Multiplier=3.141592654
Text=Thread4
AtRow5=False
St_Close6=
Close7=
EndBlock8=

[Check5]
Open0=C:\Concurrent.db
Prepare1=select * from Con where(Sometext="Thread5");
Next2=KSqlAtRow
ExpectedError2=KSqlAtRow
NoOperation3=

Function4=ReadBigTable
EventuallyExpectedError=KErrNone
LowCount=4
HighCount=68
CountStep=8
Multiplier=2.81
Text=Thread5
AtRow5=False
St_Close6=
Close7=
EndBlock8=

[Check6]
Open0=C:\Concurrent.db
Prepare1=select * from Con where(Sometext="Thread6");
Next2=KSqlAtRow
ExpectedError2=KSqlAtRow
NoOperation3=

Function4=ReadBigTable
EventuallyExpectedError=KErrNone
LowCount=5
HighCount=69
CountStep=8
Multiplier=-1.121
Text=Thread6
AtRow5=False
St_Close6=
Close7=
EndBlock8=

[Check7]
Open0=C:\Concurrent.db
Prepare1=select * from Con where(Sometext="Thread7");
Next2=KSqlAtRow
ExpectedError2=KSqlAtRow
NoOperation3=

Function4=ReadBigTable
EventuallyExpectedError=KErrNone
LowCount=6
HighCount=70
CountStep=8
Multiplier=4.8e-21
Text=Thread7
AtRow5=False
St_Close6=
Close7=
EndBlock8=

[Check8]
Open0=C:\Concurrent.db
Prepare1=select * from Con where(Sometext="Thread8");
Next2=KSqlAtRow
ExpectedError2=KSqlAtRow
NoOperation3=

Function4=ReadBigTable
EventuallyExpectedError=KErrNone
LowCount=7
HighCount=71
CountStep=8
Multiplier=3.141592654
Text=Thread8
AtRow5=False
St_Close6=
Close7=
EndBlock8=

