diff --git a/config/informix/sample_tpcc_config.xml b/config/informix/sample_tpcc_config.xml new file mode 100644 index 000000000..5144bd77f --- /dev/null +++ b/config/informix/sample_tpcc_config.xml @@ -0,0 +1,54 @@ + + + + + INFORMIX + com.informix.jdbc.IfxDriver + jdbc:informix-sqli://localhost:9088/demo:INFORMIXSERVER=informix;user=informix;password=in4mix;sslMode=DISABLED + informix + in4mix + TRANSACTION_SERIALIZABLE + 128 + + + 1 + + + 1 + + + + 10000 + 45,43,4,4,4 + + + + + + + NewOrder + + + + + Payment + + + + + OrderStatus + + + + + Delivery + + + + + StockLevel + + + + + diff --git a/config/informix/sample_ycsb_config.xml b/config/informix/sample_ycsb_config.xml new file mode 100644 index 000000000..5e960a080 --- /dev/null +++ b/config/informix/sample_ycsb_config.xml @@ -0,0 +1,47 @@ + + + + + INFORMIX + com.informix.jdbc.IfxDriver + jdbc:informix-sqli://localhost:9088/demo:INFORMIXSERVER=informix;user=informix;password=in4mix;sslMode=DISABLED + informix + in4mix + TRANSACTION_SERIALIZABLE + 128 + + + 1 + + + 1 + + + + 10000 + 50,5,15,10,10,10 + + + + + + + ReadRecord + + + InsertRecord + + + ScanRecord + + + UpdateRecord + + + DeleteRecord + + + ReadModifyWriteRecord + + + diff --git a/config/sybase/sample_tpcc_config.xml b/config/sybase/sample_tpcc_config.xml new file mode 100644 index 000000000..bb6bccb19 --- /dev/null +++ b/config/sybase/sample_tpcc_config.xml @@ -0,0 +1,55 @@ + + + + + SybaseASE + com.sybase.jdbc4.jdbc.SybDriver + jdbc:sybase:Tds:localhost:8000/test + sa + myPassword + TRANSACTION_SERIALIZABLE + 128 + + + 1 + + + 1 + + + + 10000 + 45,43,4,4,4 + + + + + + + NewOrder + + + + + Payment + + + + + OrderStatus + + + + + Delivery + + + + + StockLevel + + + + + + diff --git a/config/sybase/sample_ycsb_config.xml b/config/sybase/sample_ycsb_config.xml new file mode 100644 index 000000000..fa9b55a5c --- /dev/null +++ b/config/sybase/sample_ycsb_config.xml @@ -0,0 +1,48 @@ + + + + + SybaseASE + com.sybase.jdbc4.jdbc.SybDriver + jdbc:sybase:Tds:localhost:8000/demo + sa + myPassword + TRANSACTION_SERIALIZABLE + 128 + + + 1 + + + 1 + + + + 10000 + 50,5,15,10,10,10 + + + + + + + ReadRecord + + + InsertRecord + + + ScanRecord + + + UpdateRecord + + + DeleteRecord + + + ReadModifyWriteRecord + + + + diff --git a/pom.xml b/pom.xml index f33d51b32..3a7cf43db 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,71 @@ + + arcion + + + jumpmind + jumpmind + https://maven.jumpmind.com/repo + + + + arcion + + + + org.xerial + sqlite-jdbc + 3.36.0.3 + + + com.ibm.db2 + jcc + 11.5.8.0 + + + org.postgresql + postgresql + 42.4.0 + + + + mysql + mysql-connector-java + 8.0.29 + + + org.mariadb.jdbc + mariadb-java-client + 2.7.8 + + + com.oracle.database.jdbc + ojdbc8 + 21.1.0.0 + + + com.microsoft.sqlserver + mssql-jdbc + 11.2.3.jre17 + + + + com.ibm.informix + jdbc + 4.50.3 + + + + + jdbc.sybase + jconn4 + 16.0 + + + + sqlite @@ -62,6 +127,33 @@ + + db2 + + db2 + + + + com.ibm.db2 + jcc + 11.5.8.0 + + + + + sybase + + sybase + + + + + jdbc.sybase + jconn4 + 16.0 + + + postgres @@ -75,6 +167,7 @@ + mysql @@ -97,7 +190,7 @@ org.mariadb.jdbc mariadb-java-client - 3.1.4 + 2.7.8 @@ -110,7 +203,7 @@ com.google.cloud google-cloud-spanner-jdbc - 2.9.16 + 2.9.13 @@ -127,6 +220,19 @@ + + oracle + + oracle + + + + com.oracle.database.jdbc + ojdbc8 + 21.1.0.0 + + + phoenix @@ -153,6 +259,20 @@ + + informix + + informix + + + + + com.ibm.informix + jdbc + 4.50.3 + + + diff --git a/src/main/java/com/oltpbenchmark/WorkloadConfiguration.java b/src/main/java/com/oltpbenchmark/WorkloadConfiguration.java index 68fa03cbc..e10c3e61b 100644 --- a/src/main/java/com/oltpbenchmark/WorkloadConfiguration.java +++ b/src/main/java/com/oltpbenchmark/WorkloadConfiguration.java @@ -253,10 +253,13 @@ public void setDDLPath(String ddlPath) { */ public void init() { try { - Class.forName(this.driverClass); + // The newInstance() call is a work around for some broken Java implementations + Class.forName(this.driverClass).newInstance(); } catch (ClassNotFoundException ex) { throw new RuntimeException("Failed to initialize JDBC driver '" + this.driverClass + "'", ex); - } + } catch (java.lang.InstantiationException | java.lang.IllegalAccessException ex) { + throw new RuntimeException("Failed to initialize JDBC driver '" + this.driverClass + "'", ex); + } } public int getTerminals() { diff --git a/src/main/java/com/oltpbenchmark/api/LoaderThread.java b/src/main/java/com/oltpbenchmark/api/LoaderThread.java index 50f4ba9c3..a4699d95f 100644 --- a/src/main/java/com/oltpbenchmark/api/LoaderThread.java +++ b/src/main/java/com/oltpbenchmark/api/LoaderThread.java @@ -20,9 +20,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.oltpbenchmark.types.DatabaseType; + import java.sql.Connection; +import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Statement; + /** * A LoaderThread is responsible for loading some portion of a * benchmark's database. @@ -41,7 +46,16 @@ public LoaderThread(BenchmarkModule benchmarkModule) { @Override public final void run() { beforeLoad(); - try (Connection conn = benchmarkModule.makeConnection()) { + try (Connection conn = benchmarkModule.makeConnection()) { + DatabaseType databaseType = benchmarkModule.getWorkloadConfiguration().getDatabaseType(); + if ( databaseType == DatabaseType.SYBASEASE ) { + LOG.info("Sybase ASE: Running set arithabort numeric_truncation off"); + try (Statement stmt = conn.createStatement()) { + int result = stmt.executeUpdate("set arithabort numeric_truncation off"); + } catch (SQLException e) { + LOG.info(e.getMessage()); + } + } load(conn); } catch (SQLException ex) { SQLException next_ex = ex.getNextException(); diff --git a/src/main/java/com/oltpbenchmark/api/Worker.java b/src/main/java/com/oltpbenchmark/api/Worker.java index f1cdf68ee..ecf589ed1 100644 --- a/src/main/java/com/oltpbenchmark/api/Worker.java +++ b/src/main/java/com/oltpbenchmark/api/Worker.java @@ -79,6 +79,15 @@ public Worker(T benchmark, int id) { this.conn = this.benchmark.makeConnection(); this.conn.setAutoCommit(false); this.conn.setTransactionIsolation(this.configuration.getIsolationMode()); + DatabaseType databaseType = this.configuration.getDatabaseType(); + if ( databaseType == DatabaseType.SYBASEASE ) { + LOG.info("Running set arithabort numeric_truncation off."); + try (Statement stmt = conn.createStatement()) { + int result = stmt.executeUpdate("set arithabort numeric_truncation off"); + } catch (SQLException e) { + LOG.info(e.getMessage()); + } + } } catch (SQLException ex) { throw new RuntimeException("Failed to connect to database", ex); } diff --git a/src/main/java/com/oltpbenchmark/benchmarks/ycsb/YCSBBenchmark.java b/src/main/java/com/oltpbenchmark/benchmarks/ycsb/YCSBBenchmark.java index 155e087eb..cb7c184e8 100644 --- a/src/main/java/com/oltpbenchmark/benchmarks/ycsb/YCSBBenchmark.java +++ b/src/main/java/com/oltpbenchmark/benchmarks/ycsb/YCSBBenchmark.java @@ -77,7 +77,7 @@ protected List> makeWorkersImpl() { // LOADING FROM THE DATABASE IMPORTANT INFORMATION // LIST OF USERS Table t = this.getCatalog().getTable("USERTABLE"); - String userCount = SQLUtil.getMaxColSQL(this.workConf.getDatabaseType(), t, "ycsb_key"); + String userCount = SQLUtil.getMaxColSQL(this.workConf.getDatabaseType(), t, "YCSB_KEY"); try (Connection metaConn = this.makeConnection(); Statement stmt = metaConn.createStatement(); diff --git a/src/main/java/com/oltpbenchmark/types/DatabaseType.java b/src/main/java/com/oltpbenchmark/types/DatabaseType.java index 00e3d2b74..a6afb8434 100644 --- a/src/main/java/com/oltpbenchmark/types/DatabaseType.java +++ b/src/main/java/com/oltpbenchmark/types/DatabaseType.java @@ -35,6 +35,7 @@ public enum DatabaseType { DB2(true, false), H2(true, false), HSQLDB(false, false), + INFORMIX(false, false), POSTGRES(false, false, true), MARIADB(true, false), MONETDB(false, false), @@ -48,7 +49,8 @@ public enum DatabaseType { SQLAZURE(true, true, true), SQLITE(true, false), SQLSERVER(true, true, true), - TIMESTEN(true, false), + SYBASEASE(true, false), + TIMESTEN(true,false), PHOENIX(true, true); diff --git a/src/main/java/com/oltpbenchmark/util/SQLUtil.java b/src/main/java/com/oltpbenchmark/util/SQLUtil.java index c0cd7e8c9..d25d1d7aa 100644 --- a/src/main/java/com/oltpbenchmark/util/SQLUtil.java +++ b/src/main/java/com/oltpbenchmark/util/SQLUtil.java @@ -507,7 +507,14 @@ private static AbstractCatalog getCatalogDirect(DatabaseType databaseType, Conne String separator = md.getIdentifierQuoteString(); String catalog = connection.getCatalog(); - String schema = connection.getSchema(); + String schema; + try { + schema = connection.getSchema(); + } catch (java.lang.AbstractMethodError e) { + // Sybase ASE JDBC does not implement getSchema + LOG.info("Abstract method getSchema() not implemented and will not use schema name."); + schema = null; + } Map tables = new HashMap<>(); diff --git a/src/main/resources/benchmarks/sibench/ddl-sqlserver.sql b/src/main/resources/benchmarks/sibench/ddl-sqlserver.sql new file mode 100644 index 000000000..f0a3bfba1 --- /dev/null +++ b/src/main/resources/benchmarks/sibench/ddl-sqlserver.sql @@ -0,0 +1,5 @@ +drop table if exists sitest; +create table sitest ( + id int primary key, + value int not null +); \ No newline at end of file diff --git a/src/main/resources/benchmarks/smallbank/ddl-informix.sql b/src/main/resources/benchmarks/smallbank/ddl-informix.sql new file mode 100644 index 000000000..78bbfa71e --- /dev/null +++ b/src/main/resources/benchmarks/smallbank/ddl-informix.sql @@ -0,0 +1,24 @@ +drop table if exists checking; +drop table if exists savings; +drop table if exists accounts; + +create table accounts ( + custid bigint not null, + name varchar(64) not null, + primary key (custid) +); +create index idx_accounts_name on accounts (name); + +create table savings ( + custid bigint not null, + bal float not null, + primary key (custid), + foreign key (custid) references accounts (custid) +); + +create table checking ( + custid bigint not null, + bal float not null, + primary key (custid), + foreign key (custid) references accounts (custid) +); diff --git a/src/main/resources/benchmarks/smallbank/ddl-sqlserver.sql b/src/main/resources/benchmarks/smallbank/ddl-sqlserver.sql new file mode 100644 index 000000000..e83f3beba --- /dev/null +++ b/src/main/resources/benchmarks/smallbank/ddl-sqlserver.sql @@ -0,0 +1,24 @@ +drop table if exists checking; +drop table if exists savings; +drop table if exists accounts; + +create table accounts ( + custid bigint not null, + name varchar(64) not null, + constraint pk_accounts primary key (custid) +); +create index idx_accounts_name on accounts (name); + +create table savings ( + custid bigint not null, + bal float not null, + constraint pk_savings primary key (custid), + foreign key (custid) references accounts (custid) +); + +create table checking ( + custid bigint not null, + bal float not null, + constraint pk_checking primary key (custid), + foreign key (custid) references accounts (custid) +); diff --git a/src/main/resources/benchmarks/tatp/ddl-informix.sql b/src/main/resources/benchmarks/tatp/ddl-informix.sql new file mode 100644 index 000000000..8d3f9aa0f --- /dev/null +++ b/src/main/resources/benchmarks/tatp/ddl-informix.sql @@ -0,0 +1,79 @@ +drop table if exists call_forwarding; +drop table if exists special_facility; +drop table if exists access_info; +drop table if exists subscriber; + +create table subscriber +( + s_id integer not null primary key, + sub_nbr varchar(15) not null unique, + bit_1 smallint, + bit_2 smallint, + bit_3 smallint, + bit_4 smallint, + bit_5 smallint, + bit_6 smallint, + bit_7 smallint, + bit_8 smallint, + bit_9 smallint, + bit_10 smallint, + hex_1 smallint, + hex_2 smallint, + hex_3 smallint, + hex_4 smallint, + hex_5 smallint, + hex_6 smallint, + hex_7 smallint, + hex_8 smallint, + hex_9 smallint, + hex_10 smallint, + byte2_1 smallint, + byte2_2 smallint, + byte2_3 smallint, + byte2_4 smallint, + byte2_5 smallint, + byte2_6 smallint, + byte2_7 smallint, + byte2_8 smallint, + byte2_9 smallint, + byte2_10 smallint, + msc_location integer, + vlr_location integer +); + +create table access_info +( + s_id integer not null, + ai_type smallint not null, + data1 smallint, + data2 smallint, + data3 varchar(3), + data4 varchar(5), + primary key (s_id, ai_type), + foreign key (s_id) references subscriber (s_id) +); + + +create table special_facility +( + s_id integer not null, + sf_type smallint not null, + is_active smallint not null, + error_cntrl smallint, + data_a smallint, + data_b varchar(5), + primary key (s_id, sf_type), + foreign key (s_id) references subscriber (s_id) +); + +create table call_forwarding +( + s_id integer not null, + sf_type smallint not null, + start_time smallint not null, + end_time smallint, + numberx varchar(15), + primary key (s_id, sf_type, start_time), + foreign key (s_id, sf_type) references special_facility (s_id, sf_type) +); +create index idx_cf on call_forwarding (s_id); diff --git a/src/main/resources/benchmarks/tatp/ddl-sqlserver.sql b/src/main/resources/benchmarks/tatp/ddl-sqlserver.sql index d1ca37072..27492a8ec 100644 --- a/src/main/resources/benchmarks/tatp/ddl-sqlserver.sql +++ b/src/main/resources/benchmarks/tatp/ddl-sqlserver.sql @@ -76,4 +76,4 @@ CREATE TABLE CALL_FORWARDING ( ); -- Create Indexes -CREATE INDEX IDX_CF ON CALL_FORWARDING (S_ID); \ No newline at end of file +CREATE INDEX IDX_CF ON CALL_FORWARDING (S_ID); diff --git a/src/main/resources/benchmarks/tpcc/ddl-informix.sql b/src/main/resources/benchmarks/tpcc/ddl-informix.sql new file mode 100644 index 000000000..eff1d1c13 --- /dev/null +++ b/src/main/resources/benchmarks/tpcc/ddl-informix.sql @@ -0,0 +1,158 @@ +drop table if exists order_line; +drop table if exists stock; +drop table if exists item; +drop table if exists history; +drop table if exists new_order; +drop table if exists oorder; +drop table if exists customer; +drop table if exists district; +drop table if exists warehouse; + +create table warehouse +( + w_id int not null, + w_ytd decimal(12, 2) not null, + w_tax decimal(4, 4) not null, + w_name varchar(10) not null, + w_street_1 varchar(20) not null, + w_street_2 varchar(20) not null, + w_city varchar(20) not null, + w_state char(2) not null, + w_zip char(9) not null, + primary key (w_id) +); + + +create table district +( + d_w_id int not null references warehouse (w_id), + d_id int not null, + d_ytd decimal(12, 2) not null, + d_tax decimal(4, 4) not null, + d_next_o_id int not null, + d_name varchar(10) not null, + d_street_1 varchar(20) not null, + d_street_2 varchar(20) not null, + d_city varchar(20) not null, + d_state char(2) not null, + d_zip char(9) not null, + primary key (d_w_id, d_id) +); + +-- todo: c_since on update current_timestamp, +create table customer +( + c_w_id int not null, + c_d_id int not null, + c_id int not null, + c_discount decimal(4, 4) not null, + c_credit char(2) not null, + c_last varchar(16) not null, + c_first varchar(16) not null, + c_credit_lim decimal(12, 2) not null, + c_balance decimal(12, 2) not null, + c_ytd_payment float not null, + c_payment_cnt int not null, + c_delivery_cnt int not null, + c_street_1 varchar(20) not null, + c_street_2 varchar(20) not null, + c_city varchar(20) not null, + c_state char(2) not null, + c_zip char(9) not null, + c_phone char(16) not null, + c_since datetime year to fraction(3) not null, + c_middle char(2) not null, + c_data text not null, + primary key (c_w_id, c_d_id, c_id), + foreign key (c_w_id, c_d_id) references district (d_w_id, d_id) +); +create index idx_customer_name on customer (c_w_id, c_d_id, c_last, c_first); + +-- todo: o_entry_d on update current_timestamp +create table oorder +( + o_w_id int not null, + o_d_id int not null, + o_id int not null, + o_c_id int not null, + o_carrier_id int default null, + o_ol_cnt int not null, + o_all_local int not null, + o_entry_d datetime year to fraction(3) not null, + primary key (o_w_id, o_d_id, o_id), + unique (o_w_id, o_d_id, o_c_id, o_id), + foreign key (o_w_id, o_d_id, o_c_id) references customer (c_w_id, c_d_id, c_id) +); + +create table new_order +( + no_w_id int not null, + no_d_id int not null, + no_o_id int not null, + primary key (no_w_id, no_d_id, no_o_id), + foreign key (no_w_id, no_d_id, no_o_id) references oorder (o_w_id, o_d_id, o_id) +); + +-- todo: h_date on update current_timestamp +create table history +( + h_c_id int not null, + h_c_d_id int not null, + h_c_w_id int not null, + h_d_id int not null, + h_w_id int not null, + h_date datetime year to fraction(3) not null, + h_amount decimal(6, 2) not null, + h_data varchar(24) not null, + foreign key (h_c_w_id, h_c_d_id, h_c_id) references customer (c_w_id, c_d_id, c_id), + foreign key (h_w_id, h_d_id) references district (d_w_id, d_id) +); + +create table item +( + i_id int not null, + i_name varchar(24) not null, + i_price decimal(5, 2) not null, + i_data varchar(50) not null, + i_im_id int not null, + primary key (i_id) +); + +create table stock +( + s_w_id int not null references warehouse (w_id), + s_i_id int not null references item (i_id), + s_quantity int not null, + s_ytd decimal(8, 2) not null, + s_order_cnt int not null, + s_remote_cnt int not null, + s_data varchar(50) not null, + s_dist_01 char(24) not null, + s_dist_02 char(24) not null, + s_dist_03 char(24) not null, + s_dist_04 char(24) not null, + s_dist_05 char(24) not null, + s_dist_06 char(24) not null, + s_dist_07 char(24) not null, + s_dist_08 char(24) not null, + s_dist_09 char(24) not null, + s_dist_10 char(24) not null, + primary key (s_w_id, s_i_id) +); + +create table order_line +( + ol_w_id int not null, + ol_d_id int not null, + ol_o_id int not null, + ol_number int not null, + ol_i_id int not null, + ol_delivery_d datetime year to fraction(3), + ol_amount decimal(6, 2) not null, + ol_supply_w_id int not null, + ol_quantity decimal(6, 2) not null, + ol_dist_info char(24) not null, + primary key (ol_w_id,ol_d_id,ol_o_id,ol_number), + foreign key (ol_w_id, ol_d_id, ol_o_id) references oorder (o_w_id, o_d_id, o_id), + foreign key (ol_supply_w_id, ol_i_id) references stock (s_w_id, s_i_id) +); diff --git a/src/main/resources/benchmarks/tpcc/ddl-sybasease.sql b/src/main/resources/benchmarks/tpcc/ddl-sybasease.sql new file mode 100644 index 000000000..807faf68d --- /dev/null +++ b/src/main/resources/benchmarks/tpcc/ddl-sybasease.sql @@ -0,0 +1,148 @@ +-- based from sqlserver +-- don't abort when 0.2222 is inserted into 0.22 precision +set arithabort numeric_truncation off; + +-- DROP EXISTING TABLES +if object_id('warehouse') is not null drop table warehouse; +if object_id('stock') is not null drop table stock; +if object_id('order_line') is not null drop table order_line; +if object_id('oorder') is not null drop table oorder; +if object_id('new_order') is not null drop table new_order; +if object_id('item') is not null drop table item; +if object_id('history') is not null drop table history; +if object_id('district') is not null drop table district; +if object_id('customer') is not null drop table customer; + +-- CREATE TABLES + +CREATE TABLE warehouse( + W_ID INT NOT NULL, + W_YTD DECIMAL(12, 2) NOT NULL, + W_TAX DECIMAL(4, 4) NOT NULL, + W_NAME VARCHAR(10) NOT NULL, + W_STREET_1 VARCHAR(20) NOT NULL, + W_STREET_2 VARCHAR(20) NOT NULL, + W_CITY VARCHAR(20) NOT NULL, + W_STATE CHAR(2) NOT NULL, + W_ZIP CHAR(9) NOT NULL, + PRIMARY KEY (W_ID) +); + +CREATE TABLE stock( + S_W_ID INT NOT NULL, + S_I_ID INT NOT NULL, + S_QUANTITY DECIMAL(4, 0) NOT NULL, + S_YTD DECIMAL(8, 2) NOT NULL, + S_ORDER_CNT INT NOT NULL, + S_REMOTE_CNT INT NOT NULL, + S_DATA VARCHAR(50) NOT NULL, + S_DIST_01 CHAR(24) NOT NULL, + S_DIST_02 CHAR(24) NOT NULL, + S_DIST_03 CHAR(24) NOT NULL, + S_DIST_04 CHAR(24) NOT NULL, + S_DIST_05 CHAR(24) NOT NULL, + S_DIST_06 CHAR(24) NOT NULL, + S_DIST_07 CHAR(24) NOT NULL, + S_DIST_08 CHAR(24) NOT NULL, + S_DIST_09 CHAR(24) NOT NULL, + S_DIST_10 CHAR(24) NOT NULL, + PRIMARY KEY (S_W_ID,S_I_ID) +); + +CREATE TABLE order_line( + OL_W_ID INT NOT NULL, + OL_D_ID INT NOT NULL, + OL_O_ID INT NOT NULL, + OL_NUMBER INT NOT NULL, + OL_I_ID INT NOT NULL, + OL_DELIVERY_D DATETIME NULL, + OL_AMOUNT DECIMAL(6, 2) NOT NULL, + OL_SUPPLY_W_ID INT NOT NULL, + OL_QUANTITY DECIMAL(2, 0) NOT NULL, + OL_DIST_INFO CHAR(24) NOT NULL, + PRIMARY KEY (OL_W_ID,OL_D_ID,OL_O_ID,OL_NUMBER) +); + +CREATE TABLE oorder( + O_W_ID INT NOT NULL, + O_D_ID INT NOT NULL, + O_ID INT NOT NULL, + O_C_ID INT NOT NULL, + O_CARRIER_ID INT NULL, + O_OL_CNT DECIMAL(2, 0) NOT NULL, + O_ALL_LOCAL DECIMAL(1, 0) NOT NULL, + O_ENTRY_D DATETIME NULL, + PRIMARY KEY (O_W_ID,O_D_ID,O_ID), + UNIQUE (O_W_ID,O_D_ID,O_C_ID,O_ID) +); + +CREATE TABLE new_order( + NO_W_ID INT NOT NULL, + NO_D_ID INT NOT NULL, + NO_O_ID INT NOT NULL, + PRIMARY KEY (NO_W_ID,NO_D_ID,NO_O_ID) +); + +CREATE TABLE item( + I_ID INT NOT NULL, + I_NAME VARCHAR(24) NOT NULL, + I_PRICE DECIMAL(5, 2) NOT NULL, + I_DATA VARCHAR(50) NOT NULL, + I_IM_ID INT NOT NULL, + PRIMARY KEY (I_ID) +); + +CREATE TABLE history( + H_C_ID INT NOT NULL, + H_C_D_ID INT NOT NULL, + H_C_W_ID INT NOT NULL, + H_D_ID INT NOT NULL, + H_W_ID INT NOT NULL, + H_DATE DATETIME NULL, + H_AMOUNT DECIMAL(6, 2) NOT NULL, + H_DATA VARCHAR(24) NOT NULL +); + +CREATE TABLE district( + D_W_ID INT NOT NULL, + D_ID INT NOT NULL, + D_YTD DECIMAL(12, 2) NOT NULL, + D_TAX DECIMAL(4, 4) NOT NULL, + D_NEXT_O_ID INT NOT NULL, + D_NAME VARCHAR(10) NOT NULL, + D_STREET_1 VARCHAR(20) NOT NULL, + D_STREET_2 VARCHAR(20) NOT NULL, + D_CITY VARCHAR(20) NOT NULL, + D_STATE CHAR(2) NOT NULL, + D_ZIP CHAR(9) NOT NULL, + PRIMARY KEY (D_W_ID,D_ID) +); + + +CREATE TABLE customer( + C_W_ID INT NOT NULL, + C_D_ID INT NOT NULL, + C_ID INT NOT NULL, + C_DISCOUNT DECIMAL(4, 4) NOT NULL, + C_CREDIT CHAR(2) NOT NULL, + C_LAST VARCHAR(16) NOT NULL, + C_FIRST VARCHAR(16) NOT NULL, + C_CREDIT_LIM DECIMAL(12, 2) NOT NULL, + C_BALANCE DECIMAL(12, 2) NOT NULL, + C_YTD_PAYMENT REAL NOT NULL, + C_PAYMENT_CNT INT NOT NULL, + C_DELIVERY_CNT INT NOT NULL, + C_STREET_1 VARCHAR(20) NOT NULL, + C_STREET_2 VARCHAR(20) NOT NULL, + C_CITY VARCHAR(20) NOT NULL, + C_STATE CHAR(2) NOT NULL, + C_ZIP CHAR(9) NOT NULL, + C_PHONE CHAR(16) NOT NULL, + C_SINCE DATETIME NULL, + C_MIDDLE CHAR(2) NOT NULL, + C_DATA VARCHAR(500) NOT NULL, + PRIMARY KEY (C_W_ID,C_D_ID,C_ID) +); + +-- CREATE INDEXES +CREATE INDEX IDX_CUSTOMER_NAME ON customer (C_W_ID,C_D_ID,C_LAST,C_FIRST); diff --git a/src/main/resources/benchmarks/tpcc/dialect-sybasease.xml b/src/main/resources/benchmarks/tpcc/dialect-sybasease.xml new file mode 100644 index 000000000..9e1486667 --- /dev/null +++ b/src/main/resources/benchmarks/tpcc/dialect-sybasease.xml @@ -0,0 +1,32 @@ + + + + + + SELECT TOP 1 NO_O_ID + FROM new_order + WHERE NO_D_ID = ? AND NO_W_ID = ? ORDER BY NO_O_ID ASC + + + + + SELECT D_NEXT_O_ID,D_TAX + FROM district + WHERE D_W_ID = ? AND D_ID = ? + + + SELECT S_QUANTITY, S_DATA, S_DIST_01, S_DIST_02, S_DIST_03, S_DIST_04, S_DIST_05, + S_DIST_06, S_DIST_07, S_DIST_08, S_DIST_09, S_DIST_10 + FROM stock + WHERE S_I_ID = ? AND S_W_ID = ? + + + + + SELECT TOP 1 O_ID, O_CARRIER_ID, O_ENTRY_D + FROM oorder + WHERE O_W_ID = ? AND O_D_ID = ? AND O_C_ID = ? ORDER BY O_ID DESC + + + + diff --git a/src/main/resources/benchmarks/twitter/ddl-informix.sql b/src/main/resources/benchmarks/twitter/ddl-informix.sql new file mode 100644 index 000000000..90931610f --- /dev/null +++ b/src/main/resources/benchmarks/twitter/ddl-informix.sql @@ -0,0 +1,58 @@ +-- MySQL ddl from Twitter dump + +DROP TABLE IF EXISTS added_tweets; +DROP TABLE IF EXISTS tweets; +DROP TABLE IF EXISTS followers; +DROP TABLE IF EXISTS follows; +DROP TABLE IF EXISTS user_profiles; + +CREATE TABLE user_profiles +( + uid int NOT NULL, + name varchar(255) DEFAULT NULL, + email varchar(255) DEFAULT NULL, + partitionid int DEFAULT NULL, + partitionid2 SMALLINT DEFAULT NULL, + followers int DEFAULT NULL, + PRIMARY KEY (uid) +); +CREATE INDEX IDX_USER_FOLLOWERS ON user_profiles (followers); +CREATE INDEX IDX_USER_PARTITION ON user_profiles (partitionid); + +CREATE TABLE followers +( + f1 int NOT NULL REFERENCES user_profiles (uid), + f2 int NOT NULL REFERENCES user_profiles (uid), + PRIMARY KEY (f1, f2) +); + +CREATE TABLE follows +( + f1 int NOT NULL REFERENCES user_profiles (uid), + f2 int NOT NULL REFERENCES user_profiles (uid), + PRIMARY KEY (f1, f2) +); + +-- TODO: id AUTO_INCREMENT +CREATE TABLE tweets +( + id bigint NOT NULL, + uid int NOT NULL REFERENCES user_profiles (uid), + text char(140) NOT NULL, + createdate DATETIME YEAR TO FRACTION(3) DEFAULT NULL, + PRIMARY KEY (id) +); +-- informix auto creates based on references +-- CREATE INDEX IDX_TWEETS_UID ON tweets (uid); + +-- TODO: id auto_increment +CREATE TABLE added_tweets +( + id bigint NOT NULL, + uid int NOT NULL REFERENCES user_profiles (uid), + text char(140) NOT NULL, + createdate DATETIME YEAR TO FRACTION(3) DEFAULT NULL, + PRIMARY KEY (id) +); +-- informix auto creates based on references +-- CREATE INDEX IDX_ADDED_TWEETS_UID ON added_tweets (uid); diff --git a/src/main/resources/benchmarks/voter/ddl-informix.sql b/src/main/resources/benchmarks/voter/ddl-informix.sql new file mode 100644 index 000000000..bc4f661ae --- /dev/null +++ b/src/main/resources/benchmarks/voter/ddl-informix.sql @@ -0,0 +1,54 @@ +drop view if exists v_votes_by_phone_number; +drop view if exists v_votes_by_contestant_number_state; +drop table if exists votes; +drop table if exists area_code_state; +drop table if exists contestants; + +-- contestants table holds the contestants numbers (for voting) and names +create table contestants +( + contestant_number integer not null, + contestant_name varchar(50) not null, + primary key (contestant_number) +); + +-- map of area codes and states for geolocation classification of incoming calls +create table area_code_state +( + area_code smallint not null, + state varchar(2) not null, + primary key ( area_code ) +); + +-- votes table holds every valid vote. +-- voters are not allowed to submit more than votes, x is passed to client application +create table votes +( + vote_id bigint not null, + phone_number bigint not null, + state varchar(2) not null, + contestant_number integer not null references contestants (contestant_number), + created datetime year to fraction(3) not null +); +-- informix auto creates based on references +-- create index idx_votes_phone_number on votes (phone_number); + +-- rollup of votes by phone number, used to reject excessive voting +create view v_votes_by_phone_number +( + phone_number, num_votes +) +as + select phone_number, count(*) + from votes + group by phone_number; + +-- rollup of votes by contestant and state for the heat map and results +create view v_votes_by_contestant_number_state +( + contestant_number, state, num_votes +) +as + select contestant_number, state , count(*) + from votes + group by contestant_number, state; diff --git a/src/main/resources/benchmarks/wikipedia/ddl-informix.sql b/src/main/resources/benchmarks/wikipedia/ddl-informix.sql new file mode 100644 index 000000000..f6670c921 --- /dev/null +++ b/src/main/resources/benchmarks/wikipedia/ddl-informix.sql @@ -0,0 +1,241 @@ +-- TODO: ipb_id auto_increment + +DROP TABLE IF EXISTS watchlist; +DROP TABLE IF EXISTS value_backup; +DROP TABLE IF EXISTS user_groups; +DROP TABLE IF EXISTS text; +DROP TABLE IF EXISTS revision; +DROP TABLE IF EXISTS recentchanges; +DROP TABLE IF EXISTS page_restrictions; +DROP TABLE IF EXISTS page_backup; +DROP TABLE IF EXISTS page; +DROP TABLE IF EXISTS logging; +DROP TABLE IF EXISTS useracct; +DROP TABLE IF EXISTS ipblocks; + + +CREATE TABLE ipblocks +( + ipb_id int NOT NULL, + ipb_address text NOT NULL, + ipb_user int NOT NULL, + ipb_by int NOT NULL, + ipb_by_text text NOT NULL, + ipb_reason text NOT NULL, + ipb_timestamp varchar(14) NOT NULL, + ipb_auto SMALLINT NOT NULL, + ipb_anon_only SMALLINT NOT NULL, + ipb_create_account SMALLINT NOT NULL , + ipb_enable_autoblock SMALLINT NOT NULL , + ipb_expiry varchar(14) NOT NULL, + ipb_range_start text NOT NULL, + ipb_range_end text NOT NULL, + ipb_deleted SMALLINT NOT NULL , + ipb_block_email SMALLINT NOT NULL , + ipb_allow_usertalk SMALLINT NOT NULL , + PRIMARY KEY (ipb_id), + UNIQUE (ipb_address, ipb_user, ipb_auto, ipb_anon_only) +); + +CREATE INDEX IDX_IPB_USER ON ipblocks (ipb_user); +CREATE INDEX IDX_IPB_RANGE ON ipblocks (ipb_range_start, ipb_range_end); +CREATE INDEX IDX_IPB_TIMESTAMP ON ipblocks (ipb_timestamp); +CREATE INDEX IDX_IPB_EXPIRY ON ipblocks (ipb_expiry); + +-- TOOD: user_id auto_increment +CREATE TABLE useracct +( + user_id int NOT NULL, + user_name text NOT NULL, + user_real_name text NOT NULL, + user_password text NOT NULL, + user_newpassword text NOT NULL, + user_newpass_time varchar(14) DEFAULT NULL, + user_email text NOT NULL, + user_options text NOT NULL, + user_touched varchar(14) NOT NULL, + user_token char(32) NOT NULL, + user_email_authenticated char(14) DEFAULT NULL, + user_email_token char(32) DEFAULT NULL, + user_email_token_expires char(14) DEFAULT NULL, + user_registration varchar(14) DEFAULT NULL, + user_editcount int DEFAULT NULL, + PRIMARY KEY (user_id), + UNIQUE (user_name) +); +CREATE INDEX IDX_USER_EMAIL_TOKEN ON useracct (user_email_token); + +-- TODO: log_id auto_increment +CREATE TABLE logging +( + log_id int NOT NULL, + log_type varchar(32) NOT NULL, + log_action varchar(32) NOT NULL, + log_timestamp varchar(14) NOT NULL, + log_user int NOT NULL, + log_namespace int NOT NULL, + log_title text NOT NULL, + log_comment text NOT NULL, + log_params text NOT NULL, + log_deleted SMALLINT NOT NULL, + log_user_text text NOT NULL, + log_page int DEFAULT NULL, + PRIMARY KEY (log_id) +); +CREATE INDEX IDX_LOG_TYPE_TIME ON logging (log_type, log_timestamp); +CREATE INDEX IDX_LOG_USER_TIME ON logging (log_user, log_timestamp); +CREATE INDEX IDX_LOG_PAGE_TIME ON logging (log_namespace, log_title, log_timestamp); +CREATE INDEX IDX_LOG_TIMES ON logging (log_timestamp); +CREATE INDEX IDX_LOG_USER_TYPE_TIME ON logging (log_user, log_type, log_timestamp); +CREATE INDEX IDX_LOG_PAGE_ID_TIME ON logging (log_page, log_timestamp); + +-- TODO: page_id auto_increment +CREATE TABLE page +( + page_id int NOT NULL, + page_namespace int NOT NULL, + page_title text NOT NULL, + page_restrictions text NOT NULL, + page_counter bigint NOT NULL, + page_is_redirect SMALLINT NOT NULL, + page_is_new SMALLINT NOT NULL, + page_random double NOT NULL, + page_touched varchar(14) NOT NULL, + page_latest int NOT NULL, + page_len int NOT NULL, + PRIMARY KEY (page_id), + UNIQUE (page_namespace, page_title) +); +CREATE INDEX IDX_PAGE_RANDOM ON page (page_random); +CREATE INDEX IDX_PAGE_LEN ON page (page_len); + +-- TODO: page_id auto_increment +CREATE TABLE page_backup +( + page_id int NOT NULL, + page_namespace int NOT NULL, + page_title text NOT NULL, + page_restrictions text NOT NULL, + page_counter bigint NOT NULL, + page_is_redirect SMALLINT NOT NULL, + page_is_new SMALLINT NOT NULL, + page_random double NOT NULL, + page_touched varchar(14) NOT NULL, + page_latest int NOT NULL, + page_len int NOT NULL, + PRIMARY KEY (page_id), + UNIQUE (page_namespace, page_title) +); +CREATE INDEX IDX_PAGE_BACKUP_RANDOM ON page_backup (page_random); +CREATE INDEX IDX_PAGE_BACKUP_LEN ON page_backup (page_len); + +CREATE TABLE page_restrictions +( + pr_page int NOT NULL, + pr_type varchar(60) NOT NULL, + pr_level varchar(60) NOT NULL, + pr_cascade SMALLINT NOT NULL, + pr_user int DEFAULT NULL, + pr_expiry varchar(14) DEFAULT NULL, + pr_id int NOT NULL, + PRIMARY KEY (pr_id), + UNIQUE (pr_page, pr_type) +); +CREATE INDEX IDX_PR_TYPELEVEL ON page_restrictions (pr_type, pr_level); +CREATE INDEX IDX_PR_LEVEL ON page_restrictions (pr_level); +CREATE INDEX IDX_PR_CASCADE ON page_restrictions (pr_cascade); + +-- TOOD: rc_id auto_increment +CREATE TABLE recentchanges +( + rc_id int NOT NULL, + rc_timestamp varchar(14) NOT NULL, + rc_cur_time varchar(14) NOT NULL, + rc_user int NOT NULL, + rc_user_text text NOT NULL, + rc_namespace int NOT NULL, + rc_title text NOT NULL, + rc_comment text NOT NULL, + rc_minor SMALLINT NOT NULL, + rc_bot SMALLINT NOT NULL, + rc_new SMALLINT NOT NULL, + rc_cur_id int NOT NULL, + rc_this_oldid int NOT NULL, + rc_last_oldid int NOT NULL, + rc_type SMALLINT NOT NULL, + rc_moved_to_ns SMALLINT NOT NULL, + rc_moved_to_title text NOT NULL, + rc_patrolled SMALLINT NOT NULL, + rc_ip varchar(40) NOT NULL, + rc_old_len int DEFAULT NULL, + rc_new_len int DEFAULT NULL, + rc_deleted SMALLINT NOT NULL, + rc_logid int NOT NULL, + rc_log_type text DEFAULT NULL, + rc_log_action text DEFAULT NULL, + rc_params text, + PRIMARY KEY (rc_id) +); +CREATE INDEX IDX_RC_TIMESTAMP ON recentchanges (rc_timestamp); +CREATE INDEX IDX_RC_NAMESPACE_TITLE ON recentchanges (rc_namespace, rc_title); +CREATE INDEX IDX_RC_CUR_ID ON recentchanges (rc_cur_id); +CREATE INDEX IDX_NEW_NAME_TIMESTAMP ON recentchanges (rc_new, rc_namespace, rc_timestamp); +CREATE INDEX IDX_RC_IP ON recentchanges (rc_ip); +CREATE INDEX IDX_RC_NS_USERTEXT ON recentchanges (rc_namespace, rc_user_text); +CREATE INDEX IDX_RC_USER_TEXT ON recentchanges (rc_user_text, rc_timestamp); + +-- TODO: rev_id auto_increment +CREATE TABLE revision +( + rev_id int NOT NULL, + rev_page int NOT NULL, + rev_text_id int NOT NULL, + rev_comment text NOT NULL, + rev_user int NOT NULL, + rev_user_text text NOT NULL, + rev_timestamp varchar(14) NOT NULL, + rev_minor_edit SMALLINT NOT NULL, + rev_deleted SMALLINT NOT NULL, + rev_len int DEFAULT NULL, + rev_parent_id int DEFAULT NULL, + PRIMARY KEY (rev_id), + UNIQUE (rev_page, rev_id) +); +CREATE INDEX IDX_REV_TIMESTAMP ON revision (rev_timestamp); +CREATE INDEX IDX_PAGE_TIMESTAMP ON revision (rev_page, rev_timestamp); +CREATE INDEX IDX_USER_TIMESTAMP ON revision (rev_user, rev_timestamp); +CREATE INDEX IDX_USERTEXT_TIMESTAMP ON revision (rev_user_text, rev_timestamp); + +-- TODO old_id auto_increment +CREATE TABLE text +( + old_id int NOT NULL, + old_text TEXT NOT NULL, + old_flags text NOT NULL, + old_page int DEFAULT NULL, + PRIMARY KEY (old_id) +); + +CREATE TABLE user_groups +( + ug_user int NOT NULL REFERENCES useracct (user_id), + ug_group varchar(16) NOT NULL, + UNIQUE (ug_user, ug_group) +); +CREATE INDEX IDX_UG_GROUP ON user_groups (ug_group); + +CREATE TABLE value_backup +( + table_name text DEFAULT NULL, + maxid int DEFAULT NULL +); + +CREATE TABLE watchlist +( + wl_user int NOT NULL, + wl_namespace int NOT NULL, + wl_title text NOT NULL, + wl_notificationtimestamp varchar(14) DEFAULT NULL, + UNIQUE (wl_user, wl_namespace, wl_title) +); +CREATE INDEX IDX_WL_NAMESPACE_TITLE ON watchlist (wl_namespace, wl_title); diff --git a/src/main/resources/benchmarks/ycsb/ddl-informix.sql b/src/main/resources/benchmarks/ycsb/ddl-informix.sql new file mode 100644 index 000000000..eca277818 --- /dev/null +++ b/src/main/resources/benchmarks/ycsb/ddl-informix.sql @@ -0,0 +1,14 @@ +drop table if exists usertable; +create table usertable ( + ycsb_key int primary key, + field1 varchar(100), + field2 varchar(100), + field3 varchar(100), + field4 varchar(100), + field5 varchar(100), + field6 varchar(100), + field7 varchar(100), + field8 varchar(100), + field9 varchar(100), + field10 varchar(100) +); \ No newline at end of file diff --git a/src/main/resources/benchmarks/ycsb/ddl-sybasease.sql b/src/main/resources/benchmarks/ycsb/ddl-sybasease.sql new file mode 100644 index 000000000..510524330 --- /dev/null +++ b/src/main/resources/benchmarks/ycsb/ddl-sybasease.sql @@ -0,0 +1,20 @@ +set arithabort numeric_truncation off; + +-- DROP EXISTING TABLE +if object_id('USERTABLE') is not null drop table USERTABLE; + +-- CREATE TABLE + +CREATE TABLE USERTABLE( + YCSB_KEY INT PRIMARY KEY, + FIELD1 VARCHAR(100), + FIELD2 VARCHAR(100), + FIELD3 VARCHAR(100), + FIELD4 VARCHAR(100), + FIELD5 VARCHAR(100), + FIELD6 VARCHAR(100), + FIELD7 VARCHAR(100), + FIELD8 VARCHAR(100), + FIELD9 VARCHAR(100), + FIELD10 VARCHAR(100) + ); diff --git a/src/main/resources/benchmarks/ycsb/dialect-sybasease.xml b/src/main/resources/benchmarks/ycsb/dialect-sybasease.xml new file mode 100644 index 000000000..e3994e6c5 --- /dev/null +++ b/src/main/resources/benchmarks/ycsb/dialect-sybasease.xml @@ -0,0 +1,38 @@ + + + + + + SELECT * FROM USERTABLE WHERE YCSB_KEY=? + + + + + SELECT * FROM USERTABLE WHERE YCSB_KEY > ? AND YCSB_KEY < ? + + + + + UPDATE USERTABLE SET FIELD1=?,FIELD2=?,FIELD3=?,FIELD4=?,FIELD5=?,FIELD6=?,FIELD7=?,FIELD8=?,FIELD9=?,FIELD10=? WHERE YCSB_KEY=? + + + + + INSERT INTO USERTABLE VALUES (?,?,?,?,?,?,?,?,?,?,?) + + + + + DELETE FROM USERTABLE where YCSB_KEY=? + + + + + SELECT * from USERTABLE where YCSB_KEY=? + + + UPDATE USERTABLE SET FIELD1=?,FIELD2=?,FIELD3=?,FIELD4=?,FIELD5=?,FIELD6=?,FIELD7=?,FIELD8=?,FIELD9=?,FIELD10=? WHERE YCSB_KEY=? + + + + \ No newline at end of file diff --git a/src/main/resources/logging.properties b/src/main/resources/logging.properties index b8d3b4686..c30dcb4e9 100644 --- a/src/main/resources/logging.properties +++ b/src/main/resources/logging.properties @@ -6,4 +6,4 @@ java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter java.util.logging.ConsoleHandler.level=FINEST java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %2$s %5$s%6$s%n # Facility specific properties. -org.postgresql.level=FINEST \ No newline at end of file +org.postgresql.level=FINEST