sl@0: sl@0: // Concurrency tests. Threads[2-8] wait (semaphore) until they receive a sl@0: // signal. Thread1 creates the db and adds a table to it. It then signals the sl@0: // other threads and all eight threads write integer, real, and text data sl@0: // to the table. sl@0: [Thread1] sl@0: WaitB0=7 sl@0: Delete1=C:\Concurrent.db sl@0: ExpectedError1=KErrNotFound sl@0: Create2=C:\Concurrent.db sl@0: Exec3=Create Table Con( Someint int primary key, Somereal real, Sometext text); sl@0: Prepare4=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText); sl@0: // Wake up the other threads, we're doing the next bit concurrently. sl@0: SignalA5=7 sl@0: sl@0: Function6=WriteBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=0 sl@0: HighCount=64 sl@0: CountStep=8 sl@0: Multiplier=2.81 sl@0: Text=Thread1 sl@0: St_Close7= sl@0: Close8= sl@0: WaitB9=7 sl@0: EndBlock10= sl@0: sl@0: [Thread2] sl@0: SignalB0=1 sl@0: WaitA1=1 sl@0: Open2=C:\Concurrent.db sl@0: Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText); sl@0: Function4=WriteBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=1 sl@0: HighCount=65 sl@0: CountStep=8 sl@0: Multiplier=-1.121 sl@0: Text=Thread2 sl@0: St_Close5= sl@0: Close6= sl@0: SignalB7=1 sl@0: EndBlock8= sl@0: sl@0: [Thread3] sl@0: SignalB0=1 sl@0: WaitA1=1 sl@0: Open2=C:\Concurrent.db sl@0: Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText); sl@0: Function4=WriteBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=2 sl@0: HighCount=66 sl@0: CountStep=8 sl@0: Multiplier=4.8e-21 sl@0: Text=Thread3 sl@0: St_Close5= sl@0: Close6= sl@0: SignalB7=1 sl@0: EndBlock8= sl@0: sl@0: [Thread4] sl@0: SignalB0=1 sl@0: WaitA1=1 sl@0: Open2=C:\Concurrent.db sl@0: Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText); sl@0: Function4=WriteBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=3 sl@0: HighCount=67 sl@0: CountStep=8 sl@0: Multiplier=3.141592654 sl@0: Text=Thread4 sl@0: St_Close5= sl@0: Close6= sl@0: SignalB7=1 sl@0: EndBlock8= sl@0: sl@0: [Thread5] sl@0: SignalB0=1 sl@0: WaitA1=1 sl@0: Open2=C:\Concurrent.db sl@0: Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText); sl@0: Function4=WriteBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=4 sl@0: HighCount=68 sl@0: CountStep=8 sl@0: Multiplier=2.81 sl@0: Text=Thread5 sl@0: St_Close5= sl@0: Close6= sl@0: SignalB7=1 sl@0: EndBlock8= sl@0: sl@0: [Thread6] sl@0: SignalB0=1 sl@0: WaitA1=1 sl@0: Open2=C:\Concurrent.db sl@0: Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText); sl@0: Function4=WriteBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=5 sl@0: HighCount=69 sl@0: CountStep=8 sl@0: Multiplier=-1.121 sl@0: Text=Thread6 sl@0: St_Close5= sl@0: Close6= sl@0: SignalB7=1 sl@0: EndBlock8= sl@0: sl@0: [Thread7] sl@0: SignalB0=1 sl@0: WaitA1=1 sl@0: Open2=C:\Concurrent.db sl@0: Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText); sl@0: Function4=WriteBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=6 sl@0: HighCount=70 sl@0: CountStep=8 sl@0: Multiplier=4.8e-21 sl@0: Text=Thread7 sl@0: St_Close5= sl@0: Close6= sl@0: SignalB7=1 sl@0: EndBlock8= sl@0: sl@0: [Thread8] sl@0: SignalB0=1 sl@0: WaitA1=1 sl@0: Open2=C:\Concurrent.db sl@0: Prepare3=insert into Con(Someint, Somereal, Sometext) values(:FInt, :FReal, :FText); sl@0: Function4=WriteBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=7 sl@0: HighCount=71 sl@0: CountStep=8 sl@0: Multiplier=3.141592654 sl@0: Text=Thread8 sl@0: St_Close5= sl@0: Close6= sl@0: SignalB7=1 sl@0: EndBlock8= sl@0: sl@0: // The following 8 blocks check the content written by the threads above. sl@0: // These are entirely independent of each other and therefore do not require sl@0: // use of the semaphores. sl@0: sl@0: [Check1] sl@0: Open0=C:\Concurrent.db sl@0: Prepare1=select * from Con where(Sometext="Thread1"); sl@0: Next2=KSqlAtRow sl@0: ExpectedError2=KSqlAtRow sl@0: NoOperation3= sl@0: sl@0: Function4=ReadBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=0 sl@0: HighCount=64 sl@0: CountStep=8 sl@0: Multiplier=2.81 sl@0: Text=Thread1 sl@0: AtRow5=False sl@0: St_Close6= sl@0: Close7= sl@0: EndBlock8= sl@0: sl@0: [Check2] sl@0: Open0=C:\Concurrent.db sl@0: Prepare1=select * from Con where(Sometext="Thread2"); sl@0: Next2=KSqlAtRow sl@0: ExpectedError2=KSqlAtRow sl@0: NoOperation3= sl@0: sl@0: Function4=ReadBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=1 sl@0: HighCount=65 sl@0: CountStep=8 sl@0: Multiplier=-1.121 sl@0: Text=Thread2 sl@0: AtRow5=False sl@0: St_Close6= sl@0: Close7= sl@0: EndBlock8= sl@0: sl@0: [Check3] sl@0: Open0=C:\Concurrent.db sl@0: Prepare1=select * from Con where(Sometext="Thread3"); sl@0: Next2=KSqlAtRow sl@0: ExpectedError2=KSqlAtRow sl@0: NoOperation3= sl@0: sl@0: Function4=ReadBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=2 sl@0: HighCount=66 sl@0: CountStep=8 sl@0: Multiplier=4.8e-21 sl@0: Text=Thread3 sl@0: AtRow5=False sl@0: St_Close6= sl@0: Close7= sl@0: EndBlock8= sl@0: sl@0: [Check4] sl@0: Open0=C:\Concurrent.db sl@0: Prepare1=select * from Con where(Sometext="Thread4"); sl@0: Next2=KSqlAtRow sl@0: ExpectedError2=KSqlAtRow sl@0: NoOperation3= sl@0: sl@0: Function4=ReadBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=3 sl@0: HighCount=67 sl@0: CountStep=8 sl@0: Multiplier=3.141592654 sl@0: Text=Thread4 sl@0: AtRow5=False sl@0: St_Close6= sl@0: Close7= sl@0: EndBlock8= sl@0: sl@0: [Check5] sl@0: Open0=C:\Concurrent.db sl@0: Prepare1=select * from Con where(Sometext="Thread5"); sl@0: Next2=KSqlAtRow sl@0: ExpectedError2=KSqlAtRow sl@0: NoOperation3= sl@0: sl@0: Function4=ReadBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=4 sl@0: HighCount=68 sl@0: CountStep=8 sl@0: Multiplier=2.81 sl@0: Text=Thread5 sl@0: AtRow5=False sl@0: St_Close6= sl@0: Close7= sl@0: EndBlock8= sl@0: sl@0: [Check6] sl@0: Open0=C:\Concurrent.db sl@0: Prepare1=select * from Con where(Sometext="Thread6"); sl@0: Next2=KSqlAtRow sl@0: ExpectedError2=KSqlAtRow sl@0: NoOperation3= sl@0: sl@0: Function4=ReadBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=5 sl@0: HighCount=69 sl@0: CountStep=8 sl@0: Multiplier=-1.121 sl@0: Text=Thread6 sl@0: AtRow5=False sl@0: St_Close6= sl@0: Close7= sl@0: EndBlock8= sl@0: sl@0: [Check7] sl@0: Open0=C:\Concurrent.db sl@0: Prepare1=select * from Con where(Sometext="Thread7"); sl@0: Next2=KSqlAtRow sl@0: ExpectedError2=KSqlAtRow sl@0: NoOperation3= sl@0: sl@0: Function4=ReadBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=6 sl@0: HighCount=70 sl@0: CountStep=8 sl@0: Multiplier=4.8e-21 sl@0: Text=Thread7 sl@0: AtRow5=False sl@0: St_Close6= sl@0: Close7= sl@0: EndBlock8= sl@0: sl@0: [Check8] sl@0: Open0=C:\Concurrent.db sl@0: Prepare1=select * from Con where(Sometext="Thread8"); sl@0: Next2=KSqlAtRow sl@0: ExpectedError2=KSqlAtRow sl@0: NoOperation3= sl@0: sl@0: Function4=ReadBigTable sl@0: EventuallyExpectedError=KErrNone sl@0: LowCount=7 sl@0: HighCount=71 sl@0: CountStep=8 sl@0: Multiplier=3.141592654 sl@0: Text=Thread8 sl@0: AtRow5=False sl@0: St_Close6= sl@0: Close7= sl@0: EndBlock8= sl@0: