Annotation of embedaddon/php/ext/interbase/tests/005.phpt, revision 1.1.1.3
1.1 misho 1: --TEST--
2: InterBase: transactions
3: --SKIPIF--
4: <?php include("skipif.inc"); ?>
5: --FILE--
1.1.1.2 misho 6: <?php /* $Id$ */
1.1 misho 7:
8: require("interbase.inc");
9:
10: ibase_connect($test_base);
11:
12: @ibase_query("create table test5 (i integer)");
13: @ibase_query("delete from test5");
14: ibase_close();
15:
16:
17: echo "default transaction:\n";
18:
19: /*
20: Difference between default and other transactions:
1.1.1.3 ! misho 21: default committed when you call ibase_close().
1.1 misho 22: Other transaction doing rollback.
23:
24: If you not open default transaction with
25: ibase_trans, default transaction open
26: when you call ibase_query(), ibase_prepare(),
27: ibase_blob_create(), ibase_blob_import() first time.
28: */
29:
30: /*
31: simple default transaction test without ibase_trans()
32: */
33:
34: ibase_connect($test_base);
35:
36: echo "empty table\n";
37:
38: /* out_table call ibase_query()
39: and ibase_query() start default transaction */
40: out_table("test5");
41:
42: /* in default transaction context */
43: ibase_query("insert into test5 (i) values (1)");
44:
45: echo "one row\n";
46: out_table("test5");
47:
48: ibase_rollback(); /* default rolled */
49:
50: echo "after rollback table empty again\n";
51: out_table("test5"); /* started new default transaction */
52:
53: ibase_query("insert into test5 (i) values (2)");
54:
55: ibase_close(); /* commit here! */
56:
57: ibase_connect($test_base);
58:
59: echo "one row\n";
60: out_table("test5");
61: ibase_close();
62:
63: /*
64: default transaction on default link
65: First open transaction on link will be default.
66: $tr_def_l1 may be ommited. All queryes without link and trans
67: parameters run in this context
68: */
69:
70: $link_def = ibase_connect($test_base);
71:
72: $tr_def_l1 = ibase_trans(IBASE_READ); /* here transaction start */
73:
74: /* all default */
75: $res = ibase_query("select * from test5");
76:
77: echo "one row\n";
78: out_result($res,"test5");
79:
80: ibase_free_result($res);
81:
82: /* specify transaction context... */
83: $res = ibase_query($tr_def_l1, "select * from test5");
84:
85: echo "one row... again.\n";
86: out_result($res,"test5");
87:
88: ibase_free_result($res);
89:
90: /* specify default transaction on link */
91: $res = ibase_query($link_def, "select * from test5");
92:
93: echo "one row.\n";
94: out_result($res,"test5");
95:
96: ibase_free_result($res);
97:
98: ibase_rollback($link_def); /* just for example */
99:
100: ibase_close();
101:
102: /*
103: three transaction on default link
104: */
105: ibase_connect($test_base);
106:
107: $res = ibase_query("select * from test5");
108:
109: echo "one row\n";
110: out_result($res,"test5");
111:
112: ibase_free_result($res);
113:
114: $tr_1 = ibase_query("SET TRANSACTION");
115: $tr_2 = ibase_query("SET TRANSACTION READ ONLY");
116: $tr_3 = ibase_trans(IBASE_READ+IBASE_COMMITTED+IBASE_REC_VERSION+IBASE_WAIT);
117: $tr_4 = ibase_trans(IBASE_READ+IBASE_COMMITTED+IBASE_REC_NO_VERSION+IBASE_NOWAIT);
118:
119: /* insert in first transaction context... */
120: /* as default */
121: ibase_query("insert into test5 (i) values (3)");
122: /* specify context */
123: ibase_query($tr_1, "insert into test5 (i) values (4)");
124:
125: $res = ibase_query("select * from test5");
126:
127: echo "two rows\n";
128: out_result($res,"test5");
129:
130: ibase_free_result($res);
131:
132: $res = ibase_query($tr_1, "select * from test5");
133:
134: echo "two rows again\n";
135: out_result($res,"test5");
136:
137: ibase_free_result($res);
138:
139: ibase_commit();
140: ibase_commit($tr_1);
141:
142: $tr_1 = ibase_trans();
143: ibase_query($tr_1, "insert into test5 (i) values (5)");
144:
145: /* tr_2 is IBASE_READ + IBASE_CONCURRENCY + IBASE_WAIT */
146: $res = ibase_query($tr_2, "select * from test5");
147:
148: echo "one row in second transaction\n";
149: out_result($res,"test5");
150:
151: ibase_free_result($res);
152:
153: /* tr_3 is IBASE_COMMITTED + IBASE_REC_VERSION + IBASE_WAIT */
154: $res = ibase_query($tr_3, "select * from test5");
155:
156: echo "three rows in third transaction\n";
157: out_result($res,"test5");
158:
159: ibase_free_result($res);
160:
1.1.1.3 ! misho 161: /* tr_4 IBASE_COMMITTED + IBASE_REC_NO_VERSION + IBASE_NOWAIT */
1.1 misho 162: $res = ibase_query($tr_4, "select * from test5");
163:
164: echo "three rows in fourth transaction with deadlock\n";
165: out_result_trap_error($res,"test5");
166:
167: ibase_free_result($res);
168:
169: ibase_rollback($tr_1);
170: ibase_close();
171: /*
172: transactions on second link
173: */
174: $link_1 = ibase_pconnect($test_base);
175: $link_2 = ibase_pconnect($test_base);
176:
177: $tr_1 = ibase_trans(IBASE_DEFAULT, $link_2); /* this default transaction also */
178: $tr_2 = ibase_trans(IBASE_COMMITTED, $link_2);
179:
180: $res = ibase_query($tr_1, "select * from test5");
181:
182: echo "three rows\n";
183: out_result($res,"test5");
184:
185: ibase_free_result($res);
186:
187: ibase_query($tr_1, "insert into test5 (i) values (5)");
188:
189: $res = ibase_query($tr_1, "select * from test5");
190:
191: echo "four rows\n";
192: out_result($res,"test5");
193:
194: ibase_free_result($res);
195:
196: ibase_commit($tr_1);
197:
198: $res = ibase_query($tr_2, "select * from test5");
199:
200: echo "four rows again\n";
201: out_result($res,"test5");
202:
203: ibase_free_result($res);
204:
205: ibase_close($link_1);
206: ibase_close($link_2);
207:
208: echo "end of test\n";
209: ?>
210: --EXPECT--
211: default transaction:
212: empty table
213: --- test5 ---
214: ---
215: one row
216: --- test5 ---
217: 1
218: ---
219: after rollback table empty again
220: --- test5 ---
221: ---
222: one row
223: --- test5 ---
224: 2
225: ---
226: one row
227: --- test5 ---
228: 2
229: ---
230: one row... again.
231: --- test5 ---
232: 2
233: ---
234: one row.
235: --- test5 ---
236: 2
237: ---
238: one row
239: --- test5 ---
240: 2
241: ---
242: two rows
243: --- test5 ---
244: 2
245: 3
246: ---
247: two rows again
248: --- test5 ---
249: 2
250: 4
251: ---
252: one row in second transaction
253: --- test5 ---
254: 2
255: ---
256: three rows in third transaction
257: --- test5 ---
258: 2
259: 3
260: 4
261: ---
262: three rows in fourth transaction with deadlock
263: --- test5 ---
264: 2
265: 3
266: 4
267: errmsg [lock conflict on no wait transaction deadlock ]
268: ---
269: three rows
270: --- test5 ---
271: 2
272: 3
273: 4
274: ---
275: four rows
276: --- test5 ---
277: 2
278: 3
279: 4
280: 5
281: ---
282: four rows again
283: --- test5 ---
284: 2
285: 3
286: 4
287: 5
288: ---
289: end of test
290:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>