~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/t/insert_select.test

This patch completes the first step in the splitting of
the XA resource manager API from the storage engine API,
as outlined in the specification here:

http://drizzle.org/wiki/XaStorageEngine

* Splits plugin::StorageEngine into a base StorageEngine
  class and two derived classes, TransactionalStorageEngine
  and XaStorageEngine.  XaStorageEngine derives from
  TransactionalStorageEngine and creates the XA Resource
  Manager API for storage engines.

  - The methods moved from StorageEngine to TransactionalStorageEngine
    include releaseTemporaryLatches(), startConsistentSnapshot(), 
    commit(), rollback(), setSavepoint(), releaseSavepoint(),
    rollbackToSavepoint() and hasTwoPhaseCommit()
  - The methods moved from StorageEngine to XaStorageEngine
    include recover(), commitXid(), rollbackXid(), and prepare()

* Places all static "EngineVector"s into their proper
  namespaces (typedefs belong in header files, not implementation files)
  and places all static methods corresponding
  to either only transactional engines or only XA engines
  into their respective files in /drizzled/plugin/

* Modifies the InnoDB "handler" files to extend plugin::XaStorageEngine
  and not plugin::StorageEngine

The next step, as outlined in the wiki spec page above, is to isolate
the XA Resource Manager API into its own plugin class and modify
plugin::XaStorageEngine to implement plugin::XaResourceManager via
composition.  This is necessary to enable building plugins which can
participate in an XA transaction *without having to have that plugin
implement the entire storage engine API*

Show diffs side-by-side

added added

removed removed

Lines of Context:
87
87
select * from t1;
88
88
insert into t2 select * from t1 as t2;
89
89
select * from t1;
90
 
insert into t1 select t2.a from t1,t2 where t1.a > 0;
 
90
insert into t1 select t2.a from t1,t2;
91
91
select * from t1;
92
 
--error ER_NONUNIQ_TABLE
 
92
--error 1066
93
93
insert into t1 select * from t1,t1;
94
94
drop table t1,t2;
95
95
 
194
194
insert into t1 select t2.a from t2 group by t2.a on duplicate key update a= a + 10;
195
195
 
196
196
#Some error cases
197
 
--error ER_NON_UNIQ_ERROR
 
197
--error 1052
198
198
insert into t1 select t2.a from t2 on duplicate key update a= a + t2.b;
199
 
--error ER_BAD_FIELD_ERROR
 
199
--error 1054
200
200
insert into t1 select t2.a from t2 on duplicate key update t2.a= a + t2.b;
201
 
--error ER_BAD_FIELD_ERROR
 
201
--error 1054
202
202
insert into t1 select t2.a from t2 group by t2.a on duplicate key update a= t1.a + t2.b;
203
203
drop table t1,t2,t3;
204
204
 
218
218
create table t1(x int, y int);
219
219
create table t2(x int, z int);
220
220
insert into t1(x,y) select x,z from t2 on duplicate key update x=values(x);
221
 
--error ER_BAD_FIELD_ERROR
 
221
--error 1054
222
222
insert into t1(x,y) select x,z from t2 on duplicate key update x=values(z);
223
 
--error ER_BAD_FIELD_ERROR
 
223
--error 1054
224
224
insert into t1(x,y) select x,z from t2 on duplicate key update x=values(t2.x);
225
225
drop table t1,t2; 
226
226
 
235
235
 
236
236
flush status;
237
237
INSERT INTO t1 SELECT a + 2 FROM t1 LIMIT 1;
238
 
--replace_column 2 #
239
238
show status like 'Handler_read%';
240
239
 
241
240
DROP TABLE t1;