blob: b81606f89cfa0bfc5e7e5760ab3285a93e1ea994 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, Salesforce.com, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* Neither the name of Salesforce.com nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
/**********************************
*
* Later modifications to test Trafodion instead of Phoenix were granted to ASF.
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*************************************/
package test.java.org.trafodion.phoenix.end2end;
import static org.junit.Assert.*;
import org.junit.*;
import java.math.*;
import java.sql.*;
import java.sql.Date;
import java.util.*;
import java.text.*;
public class VariableLengthPKTest extends BaseTest {
@BeforeClass
public static void doTestSuiteSetup() throws Exception {
/* List all of the object names being used in this entire class.
* The objects are dropped with errors ignored, so it is OK if the
* object does not exist for a particular test.
*/
objDropList = new ArrayList<String>(
Arrays.asList("table " + PTSDB_NAME, "table " + PTSDB2_NAME, "table VarcharKeyTest", "table BTABLE", "table substr_test"));
doBaseTestSuiteSetup();
}
/* @AfterClass, @Before, @After are defined in BaseTest */
// TRAF private static Format format = DateUtil.getDateParser(DateUtil.DEFAULT_DATE_FORMAT);
private DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
private final String DS1 = "1970-01-01 00:58:00";
private final Date D1 = toDate(DS1);
private final Timestamp T1 = toTimestamp(DS1);
private Date toDate(String dateString) {
try {
// TRAF return (Date)format.parseObject(dateString);
return new Date(format.parse(dateString).getTime());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private Timestamp toTimestamp(String dateString) {
try {
return new Timestamp(format.parse(dateString).getTime());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void initGroupByRowKeyColumns() throws Exception {
createTestTable(PTSDB_NAME);
// Insert all rows at ts
PreparedStatement stmt = null;
if (tgtPH()) stmt = conn.prepareStatement(
"upsert into " +
"PTSDB(" +
" INST, " +
" HOST," +
" DATE)" +
"VALUES (?, ?, CURRENT_DATE())");
else if (tgtTR()) stmt = conn.prepareStatement(
"upsert into " +
"PTSDB(" +
" INST, " +
" HOST1," +
" DATE1)" +
"VALUES (?, ?, CURRENT_TIMESTAMP)");
else if (tgtSQ()) stmt = conn.prepareStatement(
"insert into " +
"PTSDB(" +
" INST, " +
" HOST1," +
" DATE1)" +
"VALUES (?, ?, CURRENT_TIMESTAMP)");
stmt.setString(1, "ab");
stmt.setString(2, "a");
stmt.execute();
stmt.setString(1, "ac");
stmt.setString(2, "b");
stmt.execute();
stmt.setString(1, "ad");
stmt.setString(2, "a");
stmt.execute();
}
private void initTableValues() throws Exception {
createTestTable(PTSDB_NAME);
// Insert all rows at ts
conn.setAutoCommit(true);
PreparedStatement stmt = null;
if (tgtPH()) stmt = conn.prepareStatement(
"upsert into " +
"PTSDB(" +
" INST, " +
" HOST," +
" DATE," +
" VAL)" +
"VALUES (?, ?, ?, ?)");
else if (tgtTR()) stmt = conn.prepareStatement(
"upsert into " +
"PTSDB(" +
" INST, " +
" HOST1," +
" DATE1," +
" VAL)" +
"VALUES (?, ?, ?, ?)");
else if (tgtSQ()) stmt = conn.prepareStatement(
"insert into " +
"PTSDB(" +
" INST, " +
" HOST1," +
" DATE1," +
" VAL)" +
"VALUES (?, ?, ?, ?)");
stmt.setString(1, "abc");
stmt.setString(2, "abc-def-ghi");
if (tgtPH()) stmt.setDate(3, new Date(System.currentTimeMillis()));
else if (tgtSQ()||tgtTR()) stmt.setTimestamp(3, new Timestamp(System.currentTimeMillis()));
stmt.setBigDecimal(4, new BigDecimal(.5));
stmt.execute();
createTestTable(BTABLE_NAME);
if (tgtPH()||tgtSQ())
conn.setAutoCommit(false);
else if (tgtTR())
conn.setAutoCommit(true);
// Insert all rows at ts
if (tgtPH()) stmt = conn.prepareStatement(
"upsert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" B_INTEGER," +
" C_INTEGER," +
" D_STRING," +
" E_STRING)" +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
else if (tgtTR()) stmt = conn.prepareStatement(
"upsert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" B_INTEGER," +
" C_INTEGER," +
" D_STRING," +
" E_STRING," +
" C_STRING)" + // TRAF: C_STRING has been changed to not null and no default for it to be a primary key.
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, '')");
else if (tgtSQ()) stmt = conn.prepareStatement(
"insert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" B_INTEGER," +
" C_INTEGER," +
" D_STRING," +
" E_STRING," +
" C_STRING)" + // TRAF: C_STRING has been changed to not null and no default for it to be a primary key.
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, '')");
stmt.setString(1, "abc");
stmt.setString(2, "111");
stmt.setString(3, "x");
stmt.setInt(4, 1);
stmt.setInt(5, 10);
stmt.setInt(6, 1000);
stmt.setString(7, null);
stmt.setString(8, "0123456789");
stmt.execute();
stmt.setString(1, "abcd");
stmt.setString(2, "222");
stmt.setString(3, "xy");
stmt.setInt(4, 2);
stmt.setNull(5, Types.INTEGER);
stmt.setNull(6, Types.INTEGER);
stmt.execute();
stmt.setString(3, "xyz");
stmt.setInt(4, 3);
stmt.setInt(5, 10);
stmt.setInt(6, 1000);
stmt.setString(7, "efg");
stmt.execute();
stmt.setString(3, "xyzz");
stmt.setInt(4, 4);
stmt.setInt(5, 40);
stmt.setNull(6, Types.INTEGER);
stmt.setString(7, null);
stmt.execute();
String ddl = null;
if (tgtPH()) ddl = "create table VarcharKeyTest" +
" (pk varchar not null primary key)";
else if (tgtSQ()||tgtTR()) ddl = "create table VarcharKeyTest" +
" (pk varchar(128) not null primary key)";
conn.createStatement().execute(ddl);
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement(
"upsert into " +
"VarcharKeyTest(pk) " +
"VALUES (?)");
else if (tgtSQ()) stmt = conn.prepareStatement(
"insert into " +
"VarcharKeyTest(pk) " +
"VALUES (?)");
stmt.setString(1, " def");
stmt.execute();
stmt.setString(1, "jkl ");
stmt.execute();
stmt.setString(1, " ghi ");
stmt.execute();
if (tgtPH()||tgtSQ())
conn.commit();
}
@Test
public void testSingleColumnScanKey() throws Exception {
printTestDescription();
String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE A_STRING=?";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, "abc");
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abc", rs.getString(1));
assertEquals("1", rs.getString(2));
assertEquals("x", rs.getString(3));
assertEquals(1, rs.getInt(4));
assertEquals(10, rs.getInt(5));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testSingleColumnGroupBy() throws Exception {
printTestDescription();
String query = "SELECT INST FROM PTSDB GROUP BY INST";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abc", rs.getString(1));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testNonfirstColumnGroupBy() throws Exception {
printTestDescription();
String query = null;
if (tgtPH()) query = "SELECT HOST FROM PTSDB WHERE INST='abc' GROUP BY HOST";
else if (tgtSQ()||tgtTR()) query = "SELECT HOST1 FROM PTSDB WHERE INST='abc' GROUP BY HOST1";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abc-def-ghi", rs.getString(1));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testGroupByRowKeyColumns() throws Exception {
printTestDescription();
String query = null;
if (tgtPH()) query = "SELECT SUBSTR(INST,1,1),HOST FROM PTSDB GROUP BY SUBSTR(INST,1,1),HOST";
else if (tgtSQ()||tgtTR()) query = "SELECT SUBSTR(INST,1,1),HOST1 FROM PTSDB GROUP BY SUBSTR(INST,1,1),HOST1 order by 1,2";
try {
initGroupByRowKeyColumns();
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("a", rs.getString(1));
assertEquals("a", rs.getString(2));
assertTrue(rs.next());
assertEquals("a", rs.getString(1));
assertEquals("b", rs.getString(2));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testSkipScan() throws Exception {
printTestDescription();
String query = null;
if (tgtPH()) query = "SELECT HOST FROM PTSDB WHERE INST='abc' AND DATE>=TO_DATE('1970-01-01 00:00:00') AND DATE <TO_DATE('2115-01-01 00:00:00')";
else if (tgtSQ()||tgtTR()) query = "SELECT HOST1 FROM PTSDB WHERE INST='abc' AND DATE1>=TIMESTAMP '1970-01-01 00:00:00' AND DATE1 <TIMESTAMP '2115-01-01 00:00:00'";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abc-def-ghi", rs.getString(1));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testSkipMax() throws Exception {
printTestDescription();
String query = null;
if (tgtPH()) query = "SELECT MAX(INST),MAX(DATE) FROM PTSDB WHERE INST='abc' AND DATE>=TO_DATE('1970-01-01 00:00:00') AND DATE <TO_DATE('2171-01-01 00:00:00')";
else if (tgtSQ()||tgtTR()) query = "SELECT MAX(INST),MAX(DATE1) FROM PTSDB WHERE INST='abc' AND DATE1>=TIMESTAMP '1970-01-01 00:00:00' AND DATE1 <TIMESTAMP '2171-01-01 00:00:00'";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abc", rs.getString(1));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testSkipMaxWithLimit() throws Exception {
printTestDescription();
String query = null;
if (tgtPH()) query = "SELECT MAX(INST),MAX(DATE) FROM PTSDB WHERE INST='abc' AND DATE>=TO_DATE('1970-01-01 00:00:00') AND DATE <TO_DATE('2171-01-01 00:00:00') LIMIT 2";
else if (tgtTR()) query = "SELECT MAX(INST),MAX(DATE1) FROM PTSDB WHERE INST='abc' AND DATE1>=TIMESTAMP '1970-01-01 00:00:00' AND DATE1 <TIMESTAMP '2171-01-01 00:00:00' LIMIT 2";
else if (tgtSQ()) query = "SELECT [FIRST 2] MAX(INST),MAX(DATE1) FROM PTSDB WHERE INST='abc' AND DATE1>=TIMESTAMP '1970-01-01 00:00:00' AND DATE1 <TIMESTAMP '2171-01-01 00:00:00'";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abc", rs.getString(1));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testSingleColumnKeyFilter() throws Exception {
printTestDescription();
// Requires not null column to be projected, since the only one projected in the query is
// nullable and will cause the no key value to be returned if it is the only one projected.
String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE B_STRING=?";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, "xy");
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abcd", rs.getString(1));
assertEquals("2", rs.getString(2));
assertEquals("xy", rs.getString(3));
assertEquals(2, rs.getInt(4));
assertEquals(0, rs.getInt(5));
assertTrue(rs.wasNull());
assertFalse(rs.next());
} finally {
}
}
@Test
public void testMultiColumnEqScanKey() throws Exception {
printTestDescription();
// TODO: add compile test to confirm start/stop scan key
String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE A_STRING=? AND A_ID=? AND B_STRING=?";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, "abcd");
statement.setString(2, "222");
statement.setString(3, "xy");
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abcd", rs.getString(1));
assertEquals("2", rs.getString(2));
assertEquals("xy", rs.getString(3));
assertEquals(2, rs.getInt(4));
assertEquals(0, rs.getInt(5));
assertTrue(rs.wasNull());
assertFalse(rs.next());
} finally {
}
}
@Test
public void testMultiColumnGTScanKey() throws Exception {
printTestDescription();
// TODO: add compile test to confirm start/stop scan key
String query = null;
if (tgtPH()) query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE A_STRING=? AND A_ID=? AND B_STRING>?";
else if (tgtSQ()||tgtTR()) query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE A_STRING=? AND A_ID=? AND B_STRING>? order by 3 ";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, "abcd");
statement.setString(2, "222");
statement.setString(3, "xy");
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abcd", rs.getString(1));
assertEquals("2", rs.getString(2));
assertEquals("xyz", rs.getString(3));
assertEquals(3, rs.getInt(4));
assertEquals(10, rs.getInt(5));
assertTrue(rs.next());
assertEquals("abcd", rs.getString(1));
assertEquals("2", rs.getString(2));
assertEquals("xyzz", rs.getString(3));
assertEquals(4, rs.getInt(4));
assertEquals(40, rs.getInt(5));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testMultiColumnGTKeyFilter() throws Exception {
printTestDescription();
// TODO: add compile test to confirm start/stop scan key
String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE A_STRING>? AND A_INTEGER>=?";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, "abc");
statement.setInt(2, 4);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("abcd", rs.getString(1));
assertEquals("2", rs.getString(2));
assertEquals("xyzz", rs.getString(3));
assertEquals(4, rs.getInt(4));
assertEquals(40, rs.getInt(5));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testNullValueEqualityScan() throws Exception {
printTestDescription();
createTestTable(PTSDB_NAME);
// Insert all rows at ts
conn.setAutoCommit(true);
PreparedStatement stmt = null;
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement("upsert into PTSDB VALUES ('', '', ?, 0.5)");
else if (tgtSQ()) stmt = conn.prepareStatement("insert into PTSDB VALUES ('', '', ?, 0.5)");
if (tgtPH()) stmt.setDate(1, D1);
else if (tgtSQ()||tgtTR()) stmt.setTimestamp(1, T1);
stmt.execute();
// Comparisons against null are always false.
String query = null;
if (tgtPH()) query = "SELECT HOST,DATE FROM PTSDB WHERE HOST='' AND INST=''";
else if (tgtSQ()||tgtTR()) query = "SELECT HOST1,DATE1 FROM PTSDB WHERE HOST1='' AND INST=''";
try {
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
if (tgtPH()) assertFalse(rs.next());
else if (tgtSQ()||tgtTR()) assertTrue(rs.next()); // TRAF, the insert did put in '' and '' for HOST1 and INST
} finally {
}
}
@Test
public void testVarLengthPKColScan() throws Exception {
printTestDescription();
createTestTable(PTSDB_NAME);
conn.setAutoCommit(true);
PreparedStatement stmt = null;
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement("upsert into PTSDB VALUES (?, 'y', ?, 0.5)");
else if (tgtSQ()) stmt = conn.prepareStatement("insert into PTSDB VALUES (?, 'y', ?, 0.5)");
stmt.setString(1, "x");
if (tgtPH()) stmt.setDate(2, D1);
else if (tgtSQ()||tgtTR()) stmt.setTimestamp(2, T1);
stmt.execute();
stmt.setString(1, "xy");
stmt.execute();
String query = null;
if (tgtPH()) query = "SELECT HOST,DATE FROM PTSDB WHERE INST='x' AND HOST='y'";
else if (tgtSQ()||tgtTR()) query = "SELECT HOST1,DATE1 FROM PTSDB WHERE INST='x' AND HOST1='y'";
try {
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
if (tgtPH()) assertEquals(D1, rs.getDate(2));
else if (tgtSQ()||tgtTR()) assertEquals(T1, rs.getTimestamp(2));
} finally {
}
}
@Test
public void testEscapedQuoteScan() throws Exception {
printTestDescription();
createTestTable(PTSDB_NAME);
conn.setAutoCommit(true);
PreparedStatement stmt = null;
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement("upsert into PTSDB VALUES (?, 'y', ?, 0.5)");
else if (tgtSQ()) stmt = conn.prepareStatement("insert into PTSDB VALUES (?, 'y', ?, 0.5)");
stmt.setString(1, "x'y");
if (tgtPH()) stmt.setDate(2, D1);
else if (tgtSQ()||tgtTR()) stmt.setTimestamp(2, T1);
stmt.execute();
stmt.setString(1, "x");
stmt.execute();
String query1 = null;
if (tgtPH()) query1 = "SELECT INST,DATE FROM PTSDB WHERE INST='x''y'";
else if (tgtSQ()||tgtTR()) query1 = "SELECT INST,DATE1 FROM PTSDB WHERE INST='x''y'";
String query2 = null;
if (tgtPH()) query2 = "SELECT INST,DATE FROM PTSDB WHERE INST='x\\\'y'";
else if (tgtSQ()||tgtTR()) query2 = "SELECT INST,DATE1 FROM PTSDB WHERE INST='x''y'";
try {
PreparedStatement statement = conn.prepareStatement(query1);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("x'y", rs.getString(1));
if (tgtPH()) assertEquals(D1, rs.getDate(2));
else if (tgtSQ()||tgtTR()) assertEquals(T1, rs.getTimestamp(2));
assertFalse(rs.next());
statement = conn.prepareStatement(query2);
rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("x'y", rs.getString(1));
if (tgtPH()) assertEquals(D1, rs.getDate(2));
else if (tgtSQ()||tgtTR()) assertEquals(T1, rs.getTimestamp(2));
assertFalse(rs.next());
} finally {
}
}
private void initPtsdbTableValues() throws Exception {
createTestTable(PTSDB_NAME);
conn.setAutoCommit(true);
PreparedStatement stmt = null;
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement("upsert into PTSDB VALUES ('x', 'y', ?, 0.5)");
else if (tgtSQ()) stmt = conn.prepareStatement("insert into PTSDB VALUES ('x', 'y', ?, 0.5)");
if (tgtPH()) stmt.setDate(1, D1);
else if (tgtSQ()||tgtTR()) stmt.setTimestamp(1, T1);
stmt.execute();
}
@Test
public void testToStringOnDate() throws Exception {
printTestDescription();
initPtsdbTableValues();
String query = null;
if (tgtPH()) query = "SELECT HOST,DATE FROM PTSDB WHERE INST='x' AND HOST='y'";
else if (tgtSQ()||tgtTR()) query = "SELECT HOST1,CAST(DATE1 as TIMESTAMP(1)) FROM PTSDB WHERE INST='x' AND HOST1='y'";
try {
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
if (tgtPH()) assertEquals(D1.toString(), rs.getString(2));
else if (tgtSQ()||tgtTR()) assertEquals(T1.toString(), rs.getString(2));
assertFalse(rs.next());
} finally {
}
}
private void initPtsdbTableValues2(Date d) throws Exception {
createTestTable(PTSDB2_NAME);
conn.setAutoCommit(true);
PreparedStatement stmt = null;
if (tgtPH()) stmt = conn.prepareStatement("upsert into "+PTSDB2_NAME+"(inst,date,val2) VALUES (?, ?, ?)");
else if (tgtTR()) stmt = conn.prepareStatement("upsert into "+PTSDB2_NAME+"(inst,date1,val2) VALUES (?, ?, ?)");
else if (tgtSQ()) stmt = conn.prepareStatement("insert into "+PTSDB2_NAME+"(inst,date1,val2) VALUES (?, ?, ?)");
stmt.setString(1, "a");
stmt.setDate(2, d);
stmt.setDouble(3, 101.3);
stmt.execute();
stmt.setString(1, "a");
stmt.setDate(2, new Date(d.getTime() + 1 * MILLIS_IN_DAY));
stmt.setDouble(3, 99.7);
stmt.execute();
stmt.setString(1, "a");
stmt.setDate(2, new Date(d.getTime() - 1 * MILLIS_IN_DAY));
stmt.setDouble(3, 105.3);
stmt.execute();
stmt.setString(1, "b");
stmt.setDate(2, d);
stmt.setDouble(3, 88.5);
stmt.execute();
stmt.setString(1, "b");
stmt.setDate(2, new Date(d.getTime() + 1 * MILLIS_IN_DAY));
stmt.setDouble(3, 89.7);
stmt.execute();
stmt.setString(1, "b");
stmt.setDate(2, new Date(d.getTime() - 1 * MILLIS_IN_DAY));
stmt.setDouble(3, 94.9);
stmt.execute();
}
// TRAF: a new override function for Timestamp
private void initPtsdbTableValues2(Timestamp d) throws Exception {
createTestTable(PTSDB2_NAME);
conn.setAutoCommit(true);
PreparedStatement stmt = null;
if (tgtPH()) stmt = conn.prepareStatement("upsert into "+PTSDB2_NAME+"(inst,date,val2) VALUES (?, ?, ?)");
else if (tgtTR()) stmt = conn.prepareStatement("upsert into "+PTSDB2_NAME+"(inst,date1,val2) VALUES (?, ?, ?)");
else if (tgtSQ()) stmt = conn.prepareStatement("insert into "+PTSDB2_NAME+"(inst,date1,val2) VALUES (?, ?, ?)");
stmt.setString(1, "a");
stmt.setTimestamp(2, d);
stmt.setDouble(3, 101.3);
stmt.execute();
stmt.setString(1, "a");
stmt.setTimestamp(2, new Timestamp(d.getTime() + 1 * MILLIS_IN_DAY));
stmt.setDouble(3, 99.7);
stmt.execute();
stmt.setString(1, "a");
stmt.setTimestamp(2, new Timestamp(d.getTime() - 1 * MILLIS_IN_DAY));
stmt.setDouble(3, 105.3);
stmt.execute();
stmt.setString(1, "b");
stmt.setTimestamp(2, d);
stmt.setDouble(3, 88.5);
stmt.execute();
stmt.setString(1, "b");
stmt.setTimestamp(2, new Timestamp(d.getTime() + 1 * MILLIS_IN_DAY));
stmt.setDouble(3, 89.7);
stmt.execute();
stmt.setString(1, "b");
stmt.setTimestamp(2, new Timestamp(d.getTime() - 1 * MILLIS_IN_DAY));
stmt.setDouble(3, 94.9);
stmt.execute();
}
@Test
public void testRoundOnDate() throws Exception {
printTestDescription();
if (tgtPH()) {
Date date = new Date(System.currentTimeMillis());
initPtsdbTableValues2(date);
} else if (tgtSQ()||tgtTR()) {
Timestamp tsp = new Timestamp(System.currentTimeMillis());
initPtsdbTableValues2(tsp);
}
String query = null;
if (tgtPH()) query = "SELECT MAX(val2)"
+ " FROM "+PTSDB2_NAME
+ " WHERE inst='a'"
+ " GROUP BY ROUND(date,'day',1)"
+ " ORDER BY MAX(val2)"; // disambiguate row order
// TRAF: (1) ORDER BY does not take a function. (2) GROUP BY only takes a function when the function is part of the SELECTed list.
else if (tgtSQ()||tgtTR()) query = "SELECT MAX(val2), DATE_TRUNC('hour',DATE_ADD(date1,interval '30' minute))"
+ " FROM "+PTSDB2_NAME
+ " WHERE inst='a'"
+ " GROUP BY DATE_TRUNC('hour',DATE_ADD(date1,interval '30' minute)) "
+ " ORDER BY 1"; // disambiguate row order
try {
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(99.7, rs.getDouble(1), 1e-6);
assertTrue(rs.next());
assertEquals(101.3, rs.getDouble(1), 1e-6);
assertTrue(rs.next());
assertEquals(105.3, rs.getDouble(1), 1e-6);
assertFalse(rs.next());
} finally {
}
}
@Test
public void testOrderBy() throws Exception {
printTestDescription();
if (tgtPH()) {
Date date = new Date(System.currentTimeMillis());
initPtsdbTableValues2(date);
} else if (tgtSQ()||tgtTR()) {
Timestamp tsp = new Timestamp(System.currentTimeMillis());
initPtsdbTableValues2(tsp);
}
String query = null;
if (tgtPH()) query = "SELECT inst,MAX(val2),MIN(val2)"
+ " FROM "+PTSDB2_NAME
+ " GROUP BY inst,ROUND(date,'day',1)"
+ " ORDER BY inst,ROUND(date,'day',1)"
;
// TRAF: (1) ORDER BY does not take a function. (2) GROUP BY only takes a function when the function is part of the SELECTed list.
else if (tgtSQ()||tgtTR()) query = "SELECT inst,MAX(val2),MIN(val2),DATE_TRUNC('hour',DATE_ADD(date1,interval '30' minute))"
+ " FROM "+PTSDB2_NAME
+ " GROUP BY inst,DATE_TRUNC('hour',DATE_ADD(date1,interval '30' minute))"
+ " ORDER BY 1, 2"
;
try {
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
if (tgtPH()) {
assertTrue(rs.next());
assertEquals("a", rs.getString(1));
assertEquals(105.3, rs.getDouble(2), 1e-6);
assertEquals(105.3, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("a", rs.getString(1));
assertEquals(101.3, rs.getDouble(2), 1e-6);
assertEquals(101.3, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("a", rs.getString(1));
assertEquals(99.7, rs.getDouble(2), 1e-6);
assertEquals(99.7, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("b", rs.getString(1));
assertEquals(94.9, rs.getDouble(2), 1e-6);
assertEquals(94.9, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("b", rs.getString(1));
assertEquals(88.5, rs.getDouble(2), 1e-6);
assertEquals(88.5, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("b", rs.getString(1));
assertEquals(89.7, rs.getDouble(2), 1e-6);
assertEquals(89.7, rs.getDouble(3), 1e-6);
assertFalse(rs.next());
} else if (tgtSQ() || tgtPH()) {
assertTrue(rs.next());
assertEquals("a", rs.getString(1));
assertEquals(99.7, rs.getDouble(2), 1e-6);
assertEquals(99.7, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("a", rs.getString(1));
assertEquals(101.3, rs.getDouble(2), 1e-6);
assertEquals(101.3, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("a", rs.getString(1));
assertEquals(105.3, rs.getDouble(2), 1e-6);
assertEquals(105.3, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("b", rs.getString(1));
assertEquals(88.5, rs.getDouble(2), 1e-6);
assertEquals(88.5, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("b", rs.getString(1));
assertEquals(89.7, rs.getDouble(2), 1e-6);
assertEquals(89.7, rs.getDouble(3), 1e-6);
assertTrue(rs.next());
assertEquals("b", rs.getString(1));
assertEquals(94.9, rs.getDouble(2), 1e-6);
assertEquals(94.9, rs.getDouble(3), 1e-6);
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testSelectCount() throws Exception {
printTestDescription();
if (tgtPH()) {
Date date = new Date(System.currentTimeMillis());
initPtsdbTableValues2(date);
} else if (tgtSQ()||tgtTR()) {
Timestamp tsp = new Timestamp(System.currentTimeMillis());
initPtsdbTableValues2(tsp);
}
String query = "SELECT COUNT(*)"
+ " FROM "+PTSDB2_NAME
+ " WHERE inst='a'";
try {
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(3, rs.getInt(1));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testBatchUpsert() throws Exception {
printTestDescription();
createTestTable(PTSDB2_NAME);
Date d = null;
Timestamp t = null;
if (tgtPH()) d = new Date(1);
else if (tgtSQ()||tgtTR()) t = new Timestamp(1);
String query = "SELECT SUM(val1),SUM(val2),SUM(val3) FROM "+PTSDB2_NAME;
String sql1 = null;
String upt1 = null;
if (tgtPH()) sql1 = "UPSERT INTO "+PTSDB2_NAME+"(inst,date,val1) VALUES (?, ?, ?)";
else if (tgtTR()) sql1 = "UPSERT INTO "+PTSDB2_NAME+"(inst,date1,val1) VALUES (?, ?, ?)";
else if (tgtSQ()) {
sql1 = "INSERT INTO "+PTSDB2_NAME+"(inst,date1,val1) VALUES (?, ?, ?)";
upt1 = "UPDATE "+PTSDB2_NAME+" SET val1 = ? WHERE (inst, date1) = (?, ?)";
}
String sql2 = null;
if (tgtPH()) sql2 = "UPSERT INTO "+PTSDB2_NAME+"(inst,date,val2) VALUES (?, ?, ?)";
else if (tgtTR()) sql2 = "UPSERT INTO "+PTSDB2_NAME+"(inst,date1,val2) VALUES (?, ?, ?)";
else if (tgtSQ()) sql2 = "INSERT INTO "+PTSDB2_NAME+"(inst,date1,val2) VALUES (?, ?, ?)";
String sql3 = null;
if (tgtPH()) sql3 = "UPSERT INTO "+PTSDB2_NAME+"(inst,date,val3) VALUES (?, ?, ?)";
else if (tgtTR()) sql3 = "UPSERT INTO "+PTSDB2_NAME+"(inst,date1,val3) VALUES (?, ?, ?)";
else if (tgtSQ()) sql3 = "INSERT INTO "+PTSDB2_NAME+"(inst,date1,val3) VALUES (?, ?, ?)";
conn.setAutoCommit(false);
// conn.setAutoCommit(true);
{
// verify precondition: SUM(val{1,2,3}) are null
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertNull(rs.getBigDecimal(1));
assertNull(rs.getBigDecimal(2));
assertNull(rs.getBigDecimal(3));
assertFalse(rs.next());
statement.close();
}
{
PreparedStatement s = conn.prepareStatement(sql1);
s.setString(1, "a");
if (tgtPH()) s.setDate(2, d);
else if (tgtSQ()||tgtTR()) s.setTimestamp(2, t);
s.setInt(3, 1);
assertEquals(1, s.executeUpdate());
s.close();
}
{
PreparedStatement s = conn.prepareStatement(sql2);
s.setString(1, "b");
if (tgtPH()) s.setDate(2, d);
else if (tgtSQ()||tgtTR()) s.setTimestamp(2, t);
s.setInt(3, 1);
assertEquals(1, s.executeUpdate());
s.close();
}
{
PreparedStatement s = conn.prepareStatement(sql3);
s.setString(1, "c");
if (tgtPH()) s.setDate(2, d);
else if (tgtSQ()||tgtTR()) s.setTimestamp(2, t);
s.setInt(3, 1);
assertEquals(1, s.executeUpdate());
s.close();
}
{
PreparedStatement s = null;
if (tgtPH()) {
s = conn.prepareStatement(sql1);
s.setString(1, "a");
s.setDate(2, d);
s.setInt(3, 5);
} else if (tgtTR()) {
s = conn.prepareStatement(sql1);
s.setString(1, "a");
s.setTimestamp(2, t);
s.setInt(3, 5);
} else if (tgtSQ()) {
s = conn.prepareStatement(upt1);
s.setInt(1, 5);
s.setString(2, "a");
s.setTimestamp(3, t);
}
assertEquals(1, s.executeUpdate());
s.close();
}
{
PreparedStatement s = null;
if (tgtPH()) {
s = conn.prepareStatement(sql1);
s.setString(1, "b");
s.setDate(2, d);
s.setInt(3, 5);
} else if (tgtTR()) {
s = conn.prepareStatement(sql1);
s.setString(1, "b");
s.setTimestamp(2, t);
s.setInt(3, 5);
} else if (tgtSQ()) {
s = conn.prepareStatement(upt1);
s.setInt(1, 5);
s.setString(2, "b");
s.setTimestamp(3, t);
}
assertEquals(1, s.executeUpdate());
s.close();
}
{
PreparedStatement s = null;
if (tgtPH()) {
s = conn.prepareStatement(sql1);
s.setString(1, "c");
s.setDate(2, d);
s.setInt(3, 5);
} else if (tgtTR()) {
s = conn.prepareStatement(sql1);
s.setString(1, "c");
s.setTimestamp(2, t);
s.setInt(3, 5);
} else if (tgtSQ()) {
s = conn.prepareStatement(upt1);
s.setInt(1, 5);
s.setString(2, "c");
s.setTimestamp(3, t);
}
assertEquals(1, s.executeUpdate());
s.close();
}
conn.commit();
// Query at a time after the upsert to confirm they took place
{
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(15, rs.getDouble(1), 1e-6);
assertEquals(1, rs.getDouble(2), 1e-6);
assertEquals(1, rs.getDouble(3), 1e-6);
assertFalse(rs.next());
statement.close();
}
}
@Test
public void testSelectStar() throws Exception {
printTestDescription();
initPtsdbTableValues();
String query = null;
if (tgtPH()) query = "SELECT * FROM PTSDB WHERE INST='x' AND HOST='y'";
else if (tgtSQ()||tgtTR()) query = "SELECT * FROM PTSDB WHERE INST='x' AND HOST1='y'";
try {
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("x",rs.getString("inst"));
if (tgtPH()) assertEquals("y",rs.getString("host"));
else if (tgtSQ()||tgtTR()) assertEquals("y",rs.getString("host1"));
if (tgtPH()) assertEquals(D1, rs.getDate("date"));
else if (tgtSQ()||tgtTR()) assertEquals(T1, rs.getTimestamp("date1"));
if (tgtPH()) assertEquals(BigDecimal.valueOf(0.5), rs.getBigDecimal("val"));
else if (tgtSQ()||tgtTR()) assertEquals(BigDecimal.valueOf(0.5).setScale(10), rs.getBigDecimal("val"));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testToCharOnDate() throws Exception {
printTestDescription();
initPtsdbTableValues();
String query = null;
if (tgtPH()) query = "SELECT HOST,TO_CHAR(DATE) FROM PTSDB WHERE INST='x' AND HOST='y'";
else if (tgtSQ()||tgtTR()) query = "SELECT HOST1,RTRIM(CAST(CAST(DATE1 as TIMESTAMP(1)) as CHAR(128))) FROM PTSDB WHERE INST='x' AND HOST1='y'";
try {
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
if (tgtPH()) assertEquals(D1.toString(), rs.getString(2));
else if (tgtSQ()||tgtTR()) assertEquals(T1.toString(), rs.getString(2));
} finally {
}
}
@Test
public void testToCharWithFormatOnDate() throws Exception {
printTestDescription();
initPtsdbTableValues();
String format = "HH:mm:ss";
String query = null;
if (tgtPH()) query = "SELECT HOST,TO_CHAR(DATE,'" + format + "') FROM PTSDB WHERE INST='x' AND HOST='y'";
else if (tgtSQ()||tgtTR()) query = "SELECT HOST1,RTRIM(CAST(CAST(DATE1 as timestamp(1)) as CHAR(128))) FROM PTSDB WHERE INST='x' AND HOST1='y'";
try {
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
if (tgtPH()) assertEquals(D1.toString(), rs.getString(2));
else if (tgtSQ()||tgtTR()) assertEquals(T1.toString(), rs.getString(2));
} finally {
}
}
@Test
public void testToDateWithFormatOnDate() throws Exception {
printTestDescription();
initPtsdbTableValues();
String format = "yyyy-MM-dd HH:mm:ss.S";
String query = null;
if (tgtPH()) query = "SELECT HOST,TO_CHAR(DATE,'" + format + "') FROM PTSDB WHERE INST='x' AND HOST='y' and DATE=TO_DATE(?,'" + format + "')";
else if (tgtSQ()||tgtTR()) query = "SELECT HOST1,RTRIM(CAST(CAST(DATE1 as timestamp(1)) as CHAR(128))) FROM PTSDB WHERE INST='x' AND HOST1='y' and DATE1=?";
try {
PreparedStatement statement = conn.prepareStatement(query);
if (tgtPH()) statement.setString(1, D1.toString());
else if (tgtSQ()||tgtTR()) statement.setString(1, T1.toString());
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
if (tgtPH()) assertEquals(D1.toString(), rs.getString(2));
else if (tgtSQ()||tgtTR()) assertEquals(T1.toString(), rs.getString(2));
} finally {
}
}
@Test
public void testMissingPKColumn() throws Exception {
printTestDescription();
createTestTable(PTSDB_NAME);
conn.setAutoCommit(true);
Statement stmt = conn.createStatement();
try {
if (tgtPH()) stmt.execute("upsert into PTSDB(INST,HOST,VAL) VALUES ('abc', 'abc-def-ghi', 0.5)");
else if (tgtTR()) stmt.execute("upsert into PTSDB(INST,HOST1,VAL,DATE1) VALUES ('abc', 'abc-def-ghi', 0.5, null)");
else if (tgtSQ()) stmt.execute("insert into PTSDB(INST,HOST1,VAL,DATE1) VALUES ('abc', 'abc-def-ghi', 0.5, null)");
fail();
} catch (Exception e) {
if (tgtPH()) assertTrue(e.getMessage().contains("may not be null"));
else if (tgtSQ()||tgtTR()) assertTrue(e.getMessage().contains("*** ERROR[4122] NULL cannot be assigned to NOT NULL column"));
} finally {
}
}
@Test
public void testNoKVColumn() throws Exception {
printTestDescription();
createTestTable(BTABLE_NAME);
conn.setAutoCommit(true);
PreparedStatement stmt = null;
if (tgtPH()) stmt = conn.prepareStatement(
"upsert into BTABLE VALUES (?, ?, ?, ?, ?)");
else if (tgtTR()) stmt = conn.prepareStatement(
"upsert into BTABLE (a_string, a_id, b_string, a_integer, c_string) VALUES (?, ?, ?, ?, ?)");
else if (tgtSQ()) stmt = conn.prepareStatement(
"insert into BTABLE (a_string, a_id, b_string, a_integer, c_string) VALUES (?, ?, ?, ?, ?)");
stmt.setString(1, "abc");
stmt.setString(2, "123");
stmt.setString(3, "x");
stmt.setInt(4, 1);
stmt.setString(5, "ab");
// Succeeds since we have an empty KV
stmt.execute();
}
// Broken, since we don't know if insert vs update. @Test
public void testMissingKVColumn() throws Exception {
printTestDescription();
createTestTable(BTABLE_NAME);
conn.setAutoCommit(true);
PreparedStatement stmt = conn.prepareStatement(
"upsert into BTABLE VALUES (?, ?, ?, ?, ?, ?)");
stmt.setString(1, "abc");
stmt.setString(2, "123");
stmt.setString(3, "x");
stmt.setInt(4, 1);
stmt.setString(5, "ab");
stmt.setInt(6, 1);
try {
stmt.execute();
fail();
} catch (Exception e) {
// Non nullable key value E_STRING has no value
assertTrue(e.getMessage().contains("may not be null"));
} finally {
}
}
@Test
public void testTooShortKVColumn() throws Exception {
printTestDescription();
createTestTable(BTABLE_NAME);
conn.setAutoCommit(true);
// Insert all rows at ts
PreparedStatement stmt = null;
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement(
"upsert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" C_STRING," +
" E_STRING)" +
"VALUES (?, ?, ?, ?, ?, ?)");
else if (tgtSQ()) stmt = conn.prepareStatement(
"insert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" C_STRING," +
" E_STRING)" +
"VALUES (?, ?, ?, ?, ?, ?)");
stmt.setString(1, "abc");
stmt.setString(2, "123");
stmt.setString(3, "x");
stmt.setInt(4, 1);
stmt.setString(5, "ab");
stmt.setString(6, "01234");
try {
stmt.execute();
} catch (Exception e) {
fail("Constraint voilation Exception should not be thrown, the characters have to be padded");
} finally {
}
}
@Test
public void testTooShortPKColumn() throws Exception {
printTestDescription();
createTestTable(BTABLE_NAME);
conn.setAutoCommit(true);
// Insert all rows at ts
PreparedStatement stmt = null;
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement(
"upsert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" C_STRING," +
" E_STRING)" +
"VALUES (?, ?, ?, ?, ?, ?)");
else if (tgtSQ()) stmt = conn.prepareStatement(
"insert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" C_STRING," +
" E_STRING)" +
"VALUES (?, ?, ?, ?, ?, ?)");
stmt.setString(1, "abc");
stmt.setString(2, "12");
stmt.setString(3, "x");
stmt.setInt(4, 1);
stmt.setString(5, "ab");
stmt.setString(6, "0123456789");
try {
stmt.execute();
} catch (Exception e) {
fail("Constraint voilation Exception should not be thrown, the characters have to be padded");
} finally {
}
}
@Test
public void testTooLongPKColumn() throws Exception {
printTestDescription();
createTestTable(BTABLE_NAME);
conn.setAutoCommit(true);
// Insert all rows at ts
PreparedStatement stmt = null;
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement(
"upsert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" C_STRING," +
" E_STRING)" +
"VALUES (?, ?, ?, ?, ?, ?)");
else if (tgtSQ()) stmt = conn.prepareStatement(
"insert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" C_STRING," +
" E_STRING)" +
"VALUES (?, ?, ?, ?, ?, ?)");
stmt.setString(1, "abc");
stmt.setString(2, "123");
stmt.setString(3, "x");
stmt.setInt(4, 1);
stmt.setString(5, "abc");
stmt.setString(6, "0123456789");
try {
stmt.execute();
fail();
} catch (Exception e) {
if (tgtPH()) assertTrue(e.getMessage().contains(" may not exceed 2 bytes"));
// This error message is different between T2 and T4.
// Only make sure that we get an exception now.
// else if (tgtSQ()||tgtTR()) assertTrue(e.getMessage().contains("VARCHAR data longer than column length"));
} finally {
}
}
@Test
public void testTooLongKVColumn() throws Exception {
printTestDescription();
createTestTable(BTABLE_NAME);
conn.setAutoCommit(true);
// Insert all rows at ts
PreparedStatement stmt = null;
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement(
"upsert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" C_STRING," +
" D_STRING," +
" E_STRING)" +
"VALUES (?, ?, ?, ?, ?, ?, ?)");
else if (tgtSQ()) stmt = conn.prepareStatement(
"insert into " +
"BTABLE(" +
" A_STRING, " +
" A_ID," +
" B_STRING," +
" A_INTEGER," +
" C_STRING," +
" D_STRING," +
" E_STRING)" +
"VALUES (?, ?, ?, ?, ?, ?, ?)");
stmt.setString(1, "abc");
stmt.setString(2, "123");
stmt.setString(3, "x");
stmt.setInt(4, 1);
stmt.setString(5, "ab");
stmt.setString(6,"abcd");
stmt.setString(7, "0123456789");
try {
stmt.execute();
fail();
} catch (Exception e) {
if (tgtPH()) assertTrue(e.getMessage().contains(" may not exceed 3 bytes"));
// This error message is different between T2 and T4.
// Only make sure that we get an exception now.
// else if (tgtSQ()||tgtTR()) assertTrue(e.getMessage().contains("VARCHAR data longer than column length"));
} finally {
}
}
@Test
public void testMultiFixedLengthNull() throws Exception {
printTestDescription();
String query = null;
if (tgtPH()) query = "SELECT B_INTEGER,C_INTEGER,COUNT(1) FROM BTABLE GROUP BY C_INTEGER,B_INTEGER";
else if (tgtSQ()||tgtTR()) query = "SELECT B_INTEGER,C_INTEGER,COUNT(1) FROM BTABLE GROUP BY C_INTEGER,B_INTEGER order by 1";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
if (tgtPH()) {
assertTrue(rs.next());
assertEquals(0, rs.getInt(1));
assertTrue(rs.wasNull());
assertEquals(0, rs.getInt(2));
assertTrue(rs.wasNull());
assertEquals(1, rs.getLong(3));
}
assertTrue(rs.next());
assertEquals(10, rs.getInt(1));
assertEquals(1000, rs.getInt(2));
assertEquals(2, rs.getLong(3));
assertTrue(rs.next());
assertEquals(40, rs.getInt(1));
assertEquals(0, rs.getInt(2));
assertTrue(rs.wasNull());
assertEquals(1, rs.getLong(3));
if (tgtSQ()||tgtTR()) {
assertTrue(rs.next());
assertEquals(0, rs.getInt(1));
assertTrue(rs.wasNull());
assertEquals(0, rs.getInt(2));
assertTrue(rs.wasNull());
assertEquals(1, rs.getLong(3));
}
assertFalse(rs.next());
} finally {
}
}
@Test
public void testSingleFixedLengthNull() throws Exception {
printTestDescription();
String query = null;
if (tgtPH()) query = "SELECT C_INTEGER,COUNT(1) FROM BTABLE GROUP BY C_INTEGER";
else if (tgtSQ()||tgtTR()) query = "SELECT C_INTEGER,COUNT(1) FROM BTABLE GROUP BY C_INTEGER order by 1 desc";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(0, rs.getInt(1));
assertTrue(rs.wasNull());
assertEquals(2, rs.getLong(2));
assertTrue(rs.next());
assertEquals(1000, rs.getInt(1));
assertEquals(2, rs.getLong(2));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testMultiMixedTypeGroupBy() throws Exception {
printTestDescription();
String query = null;
if (tgtPH()) query = "SELECT A_ID, E_STRING, D_STRING, C_INTEGER, COUNT(1) FROM BTABLE GROUP BY A_ID, E_STRING, D_STRING, C_INTEGER";
else if (tgtSQ()||tgtTR()) query = "SELECT A_ID, E_STRING, D_STRING, C_INTEGER, COUNT(1) FROM BTABLE GROUP BY A_ID, E_STRING, D_STRING, C_INTEGER order by 1, 3 desc";
try {
initTableValues();
PreparedStatement statement = conn.prepareStatement(query);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("111", rs.getString(1));
assertEquals("0123456789", rs.getString(2));
assertEquals(null, rs.getString(3));
assertEquals(1000, rs.getInt(4));
assertEquals(1, rs.getInt(5));
assertTrue(rs.next());
assertEquals("222", rs.getString(1));
assertEquals("0123456789", rs.getString(2));
assertEquals(null, rs.getString(3));
assertEquals(0, rs.getInt(4));
assertTrue(rs.wasNull());
assertEquals(2, rs.getInt(5));
assertTrue(rs.next());
assertEquals("222", rs.getString(1));
assertEquals("0123456789", rs.getString(2));
assertEquals("efg", rs.getString(3));
assertEquals(1000, rs.getInt(4));
assertEquals(1, rs.getInt(5));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testSubstrFunction() throws Exception {
printTestDescription();
String query[] = null;
if (tgtPH()) query = new String[] {
"SELECT substr('ABC',-1,1) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',-4,1) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',2,4) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',1,1) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',0,1) FROM BTABLE LIMIT 1",
// Test for multibyte characters support.
"SELECT substr('ĎďĒ',0,1) FROM BTABLE LIMIT 1",
"SELECT substr('ĎďĒ',0,2) FROM BTABLE LIMIT 1",
"SELECT substr('ĎďĒ',1,1) FROM BTABLE LIMIT 1",
"SELECT substr('ĎďĒ',1,2) FROM BTABLE LIMIT 1",
"SELECT substr('ĎďĒ',2,1) FROM BTABLE LIMIT 1",
"SELECT substr('ĎďĒ',2,2) FROM BTABLE LIMIT 1",
"SELECT substr('ĎďĒ',-1,1) FROM BTABLE LIMIT 1",
"SELECT substr('Ďďɚʍ',2,4) FROM BTABLE LIMIT 1",
"SELECT pk FROM VarcharKeyTest WHERE substr(pk, 0, 3)='jkl'",
};
else if (tgtTR()) query = new String[] {
"SELECT substr('ABC',-1,1) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',-4,1) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',2,4) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',1,1) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',0,1) FROM BTABLE LIMIT 1",
// Test for multibyte characters support.
// TRAF: use ASCII for now.
"SELECT substr('ABC',0,2) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',0,3) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',1,2) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',1,3) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',2,1) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',2,2) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',2,4) FROM BTABLE LIMIT 1",
"SELECT substr('ABC',1,100) FROM BTABLE LIMIT 1",
"SELECT pk FROM VarcharKeyTest WHERE substr(pk, 1, 3)='jkl'",
};
else if (tgtSQ()) query = new String[] {
"SELECT [FIRST 1] substr('ABC',-1,1) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',-4,1) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',2,4) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',1,1) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',0,1) FROM BTABLE",
// Test for multibyte characters support.
// TRAF: use ASCII for now.
"SELECT [FIRST 1] substr('ABC',0,2) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',0,3) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',1,2) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',1,3) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',2,1) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',2,2) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',2,4) FROM BTABLE",
"SELECT [FIRST 1] substr('ABC',1,100) FROM BTABLE",
"SELECT pk FROM VarcharKeyTest WHERE substr(pk, 1, 3)='jkl'",
};
String result[] = null;
if (tgtPH()) result = new String[]{
"C",
null,
"BC",
"A",
"A",
"Ď",
"Ďď",
"Ď",
"Ďď",
"ď",
"ďĒ",
"Ē",
"ďɚʍ",
"jkl ",
};
else if (tgtSQ()||tgtTR()) result = new String[]{
"",
"",
"BC",
"A",
"",
"A",
"AB",
"AB",
"ABC",
"B",
"BC",
"BC",
"ABC",
"jkl ",
};
assertEquals(query.length,result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testRegexReplaceFunction() throws Exception {
printTestDescription();
if (tgtSQ()||tgtTR()) return; // TRAF: do not support regexp_replace()
// NOTE: we need to double escape the "\\" here because conn.prepareStatement would
// also try to evaluate the escaping. As a result, to represent what normally would be
// a "\d" in this test, it would become "\\\\d".
String query[] = {
"SELECT regexp_replace('', '') FROM BTABLE LIMIT 1",
"SELECT regexp_replace('', 'abc', 'def') FROM BTABLE LIMIT 1",
"SELECT regexp_replace('123abcABC', '[a-z]+') FROM BTABLE LIMIT 1",
"SELECT regexp_replace('123-abc-ABC', '-[a-zA-Z-]+') FROM BTABLE LIMIT 1",
"SELECT regexp_replace('abcABC123', '\\\\d+', '') FROM BTABLE LIMIT 1",
"SELECT regexp_replace('abcABC123', '\\\\D+', '') FROM BTABLE LIMIT 1",
"SELECT regexp_replace('abc', 'abc', 'def') FROM BTABLE LIMIT 1",
"SELECT regexp_replace('abc123ABC', '\\\\d+', 'def') FROM BTABLE LIMIT 1",
"SELECT regexp_replace('abc123ABC', '[0-9]+', '#') FROM BTABLE LIMIT 1",
"SELECT CASE WHEN regexp_replace('abcABC123', '[a-zA-Z]+') = '123' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT A_STRING FROM BTABLE WHERE A_ID = regexp_replace('abcABC111', '[a-zA-Z]+') LIMIT 1", // 111
// Test for multibyte characters support.
"SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', '[a-zA-Z]+') from BTABLE LIMIT 1",
"SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', '[Ď-ě]+', '#') from BTABLE LIMIT 1",
"SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', '.+', 'replacement') from BTABLE LIMIT 1",
"SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', 'Ďď', 'DD') from BTABLE LIMIT 1",
};
String result[] = {
null,
null,
"123ABC",
"123",
"abcABC",
"123",
"def",
"abcdefABC",
"abc#ABC",
"1",
"abc", // the first column
"Ďď Ēĕ ĜĞ ϗϘϛϢ",
"# # ĜĞ ϗϘϛϢ",
"replacement",
"DD Ēĕ ĜĞ ϗϘϛϢ",
};
assertEquals(query.length,result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testRegexpSubstrFunction() throws Exception {
printTestDescription();
if (tgtSQ()||tgtTR()) return; // TRAF: do not support regexp_substr()
String query[] = {
"SELECT regexp_substr('', '', 0) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('', '', 1) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('', 'abc', 0) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('abc', '', 0) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('123', '123', 3) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('123', '123', -4) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('123ABC', '[a-z]+', 0) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('123ABC', '[0-9]+', 4) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('123ABCabc', '\\\\d+', 0) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('123ABCabc', '\\\\D+', 0) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('123ABCabc', '\\\\D+', 4) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('123ABCabc', '\\\\D+', 7) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('na11-app5-26-sjl', '[^-]+', 0) FROM BTABLE LIMIT 1",
"SELECT regexp_substr('na11-app5-26-sjl', '[^-]+') FROM BTABLE LIMIT 1",
// Test for multibyte characters support.
"SELECT regexp_substr('ĎďĒĕĜĞ', '.+') from BTABLE LIMIT 1",
"SELECT regexp_substr('ĎďĒĕĜĞ', '.+', 3) from BTABLE LIMIT 1",
"SELECT regexp_substr('ĎďĒĕĜĞ', '[a-zA-Z]+', 0) from BTABLE LIMIT 1",
"SELECT regexp_substr('ĎďĒĕĜĞ', '[Ď-ě]+', 3) from BTABLE LIMIT 1",
};
String result[] = {
null,
null,
null,
null,
null,
null,
null,
null,
"123",
"ABCabc",
"ABCabc",
"abc",
"na11",
"na11",
"ĎďĒĕĜĞ",
"ĒĕĜĞ",
null,
"Ēĕ",
};
assertEquals(query.length,result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testLikeConstant() throws Exception {
printTestDescription();
String query[] = null;
if (tgtPH()) query = new String[] {
"SELECT CASE WHEN 'ABC' LIKE '' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'ABC' LIKE 'A_' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'ABC' LIKE 'A__' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'AB_C' LIKE 'AB\\_C' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'ABC%DE' LIKE 'ABC\\%D%' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
};
else if (tgtTR()) query = new String[] {
"SELECT CASE WHEN 'ABC' LIKE '' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'ABC' LIKE 'A_' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'ABC' LIKE 'A__' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'AB_C' LIKE 'AB\\_C' ESCAPE '\\' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'ABC%DE' LIKE 'ABC\\%D%' ESCAPE '\\' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
};
else if (tgtSQ()) query = new String[] {
"SELECT [FIRST 1] CASE WHEN 'ABC' LIKE '' THEN '1' ELSE '2' END FROM BTABLE",
"SELECT [FIRST 1] CASE WHEN 'ABC' LIKE 'A_' THEN '1' ELSE '2' END FROM BTABLE",
"SELECT [FIRST 1] CASE WHEN 'ABC' LIKE 'A__' THEN '1' ELSE '2' END FROM BTABLE",
"SELECT [FIRST 1] CASE WHEN 'AB_C' LIKE 'AB\\_C' ESCAPE '\\' THEN '1' ELSE '2' END FROM BTABLE",
"SELECT [FIRST 1] CASE WHEN 'ABC%DE' LIKE 'ABC\\%D%' ESCAPE '\\' THEN '1' ELSE '2' END FROM BTABLE",
};
String result[] = {
"2",
"2",
"1",
"1",
"1",
};
assertEquals(query.length,result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(query[i],result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testInListConstant() throws Exception {
printTestDescription();
String query[] = null;
if (tgtPH()) query = new String[] {
"SELECT CASE WHEN 'a' IN (null,'a') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN NOT 'a' IN (null,'b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'a' IN (null,'b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN NOT 'a' IN ('c','b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 1 IN ('foo',2,1) THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
};
// TRAF: null is not allowed in predicate ('a'=null). This is a 4099
// error. (only col IS NULL is supported) Remove null from IN () predicates.
else if (tgtTR()) query = new String[] {
"SELECT CASE WHEN 'a' IN ('a') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN NOT 'a' IN ('b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 'a' IN ('b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN NOT 'a' IN ('c','b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
"SELECT CASE WHEN 1 IN (2,1) THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
};
else if (tgtSQ()) query = new String[] {
"SELECT [FIRST 1] CASE WHEN 'a' IN ('a') THEN '1' ELSE '2' END FROM BTABLE",
"SELECT [FIRST 1] CASE WHEN NOT 'a' IN ('b') THEN '1' ELSE '2' END FROM BTABLE",
"SELECT [FIRST 1] CASE WHEN 'a' IN ('b') THEN '1' ELSE '2' END FROM BTABLE",
"SELECT [FIRST 1] CASE WHEN NOT 'a' IN ('c','b') THEN '1' ELSE '2' END FROM BTABLE",
"SELECT [FIRST 1] CASE WHEN 1 IN (2,1) THEN '1' ELSE '2' END FROM BTABLE",
};
String result[] = null;
if (tgtPH()) result = new String[] {
"1",
"2",
"2",
"1",
"1",
};
else if (tgtSQ()||tgtTR()) result = new String[] {
"1",
"1",
"2",
"1",
"1",
};
assertEquals(query.length,result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(query[i],result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testLikeOnColumn() throws Exception {
printTestDescription();
createTestTable(PTSDB_NAME);
PreparedStatement stmt = null;
if (tgtPH()||tgtTR()) stmt = conn.prepareStatement("upsert into PTSDB VALUES (?, ?, ?, 0.5)");
else if (tgtSQ()) stmt = conn.prepareStatement("insert into PTSDB VALUES (?, ?, ?, 0.5)");
if (tgtPH()) stmt.setDate(3, D1);
else if (tgtSQ()||tgtTR()) stmt.setTimestamp(3, T1);
stmt.setString(1, "a");
stmt.setString(2, "a");
stmt.execute();
stmt.setString(1, "x");
stmt.setString(2, "a");
stmt.execute();
stmt.setString(1, "xy");
stmt.setString(2, "b");
stmt.execute();
stmt.setString(1, "xyz");
stmt.setString(2, "c");
stmt.execute();
stmt.setString(1, "xyza");
stmt.setString(2, "d");
stmt.execute();
stmt.setString(1, "xyzab");
stmt.setString(2, "e");
stmt.execute();
stmt.setString(1, "z");
stmt.setString(2, "e");
stmt.execute();
PreparedStatement statement = null;
ResultSet rs;
try {
// Test 1
if (tgtPH()) statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST LIKE 'x%'");
else if (tgtSQ()||tgtTR()) statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST LIKE 'x%' order by 1");
rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("x", rs.getString(1));
assertTrue(rs.next());
assertEquals("xy", rs.getString(1));
assertTrue(rs.next());
assertEquals("xyz", rs.getString(1));
assertTrue(rs.next());
assertEquals("xyza", rs.getString(1));
assertTrue(rs.next());
assertEquals("xyzab", rs.getString(1));
assertFalse(rs.next());
// Test 2
if (tgtPH()) statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST LIKE 'xy_a%'");
else if (tgtSQ()||tgtTR()) statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST LIKE 'xy_a%' order by 1");
rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("xyza", rs.getString(1));
assertTrue(rs.next());
assertEquals("xyzab", rs.getString(1));
assertFalse(rs.next());
// Test 3
if (tgtPH()) statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST NOT LIKE 'xy_a%'");
else if (tgtSQ()||tgtTR()) statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST NOT LIKE 'xy_a%' order by 1");
rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals("a", rs.getString(1));
assertTrue(rs.next());
assertEquals("x", rs.getString(1));
assertTrue(rs.next());
assertEquals("xy", rs.getString(1));
assertTrue(rs.next());
assertEquals("xyz", rs.getString(1));
assertTrue(rs.next());
assertEquals("z", rs.getString(1));
assertFalse(rs.next());
// Test 4
statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE 'xzabc' LIKE 'xy_a%'");
rs = statement.executeQuery();
assertFalse(rs.next());
} finally {
}
}
@Test
public void testIsNullInPK() throws Exception {
printTestDescription();
createTestTable(PTSDB_NAME);
conn.setAutoCommit(true);
PreparedStatement stmt = null;
if (tgtPH()) stmt = conn.prepareStatement("upsert into PTSDB VALUES ('', '', ?, 0.5)");
else if (tgtTR()) stmt = conn.prepareStatement("upsert into PTSDB VALUES (null, null, ?, 0.5)");
else if (tgtSQ()) stmt = conn.prepareStatement("insert into PTSDB VALUES (null, null, ?, 0.5)");
stmt.setDate(1, D1);
stmt.execute();
String query = null;
if (tgtPH()) query = "SELECT HOST,INST,DATE FROM PTSDB WHERE HOST IS NULL AND INST IS NULL AND DATE=?";
else if (tgtSQ()||tgtTR()) query = "SELECT HOST1,INST,DATE1 FROM PTSDB WHERE HOST1 IS NULL AND INST IS NULL AND DATE1=?";
try {
PreparedStatement statement = conn.prepareStatement(query);
if (tgtPH()) statement.setDate(1, D1);
else if (tgtSQ()||tgtTR()) statement.setTimestamp(1, T1);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertNull(rs.getString(1));
assertNull(rs.getString(2));
if (tgtPH()) assertEquals(D1, rs.getDate(3));
else if (tgtSQ()||tgtTR()) assertEquals(T1, rs.getTimestamp(3));
assertFalse(rs.next());
} finally {
}
}
@Test
public void testLengthFunction() throws Exception {
printTestDescription();
String query[] = null;
if (tgtPH()) query = new String[] {
"SELECT length('') FROM BTABLE LIMIT 1",
"SELECT length(' ') FROM BTABLE LIMIT 1",
"SELECT length('1') FROM BTABLE LIMIT 1",
"SELECT length('1234') FROM BTABLE LIMIT 1",
"SELECT length('ɚɦɰɸ') FROM BTABLE LIMIT 1",
"SELECT length('ǢǛǟƈ') FROM BTABLE LIMIT 1",
"SELECT length('This is a test!') FROM BTABLE LIMIT 1",
"SELECT A_STRING FROM BTABLE WHERE length(A_STRING)=3",
};
else if (tgtTR()) query = new String[] {
"SELECT char_length('') FROM BTABLE LIMIT 1",
"SELECT char_length(' ') FROM BTABLE LIMIT 1",
"SELECT char_length('1') FROM BTABLE LIMIT 1",
"SELECT char_length('1234') FROM BTABLE LIMIT 1",
"SELECT char_length('ABCD') FROM BTABLE LIMIT 1",
"SELECT char_length('!@#$') FROM BTABLE LIMIT 1",
"SELECT char_length('This is a test!') FROM BTABLE LIMIT 1",
"SELECT A_STRING FROM BTABLE WHERE char_length(A_STRING)=3",
};
else if (tgtSQ()) query = new String[] {
"SELECT [FIRST 1] char_length('') FROM BTABLE",
"SELECT [FIRST 1] char_length(' ') FROM BTABLE",
"SELECT [FIRST 1] char_length('1') FROM BTABLE",
"SELECT [FIRST 1] char_length('1234') FROM BTABLE",
"SELECT [FIRST 1] char_length('ABCD') FROM BTABLE",
"SELECT [FIRST 1] char_length('!@#$') FROM BTABLE",
"SELECT [FIRST 1] char_length('This is a test!') FROM BTABLE",
"SELECT A_STRING FROM BTABLE WHERE char_length(A_STRING)=3",
};
String result[] = null;
if (tgtPH()) result = new String[] {
null,
"1",
"1",
"4",
"4",
"4",
"15",
"abc",
};
else if (tgtSQ()||tgtTR()) result = new String[] {
"0",
"1",
"1",
"4",
"4",
"4",
"15",
"abc",
};
assertEquals(query.length,result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(query[i],result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testUpperFunction() throws Exception {
printTestDescription();
String query[] = null;
if (tgtPH()) query = new String[] {
"SELECT upper('abc') FROM BTABLE LIMIT 1",
"SELECT upper('Abc') FROM BTABLE LIMIT 1",
"SELECT upper('ABC') FROM BTABLE LIMIT 1",
"SELECT upper('ĎďĒ') FROM BTABLE LIMIT 1",
"SELECT upper('ß') FROM BTABLE LIMIT 1",
};
else if (tgtTR()) query = new String[] {
"SELECT upper('abc') FROM BTABLE LIMIT 1",
"SELECT upper('Abc') FROM BTABLE LIMIT 1",
"SELECT upper('ABC') FROM BTABLE LIMIT 1",
// TRAF: test only ASCII for now
"SELECT upper('123') FROM BTABLE LIMIT 1",
"SELECT upper('#$+') FROM BTABLE LIMIT 1",
};
else if (tgtSQ()) query = new String[] {
"SELECT [FIRST 1] upper('abc') FROM BTABLE",
"SELECT [FIRST 1] upper('Abc') FROM BTABLE",
"SELECT [FIRST 1] upper('ABC') FROM BTABLE",
// TRAF: test only ASCII for now
"SELECT [FIRST 1] upper('123') FROM BTABLE",
"SELECT [FIRST 1] upper('#$+') FROM BTABLE",
};
String result[] = null;
if (tgtPH()) result = new String[] {
"ABC",
"ABC",
"ABC",
"ĎĎĒ",
"SS",
};
else if (tgtSQ()||tgtTR()) result = new String[] {
"ABC",
"ABC",
"ABC",
"123",
"#$+",
};
assertEquals(query.length, result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(query[i],result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testLowerFunction() throws Exception {
printTestDescription();
String query[] = null;
if (tgtPH()) query = new String[] {
"SELECT lower('abc') FROM BTABLE LIMIT 1",
"SELECT lower('Abc') FROM BTABLE LIMIT 1",
"SELECT lower('ABC') FROM BTABLE LIMIT 1",
"SELECT lower('ĎďĒ') FROM BTABLE LIMIT 1",
"SELECT lower('ß') FROM BTABLE LIMIT 1",
"SELECT lower('SS') FROM BTABLE LIMIT 1",
};
else if (tgtTR()) query = new String[] {
"SELECT lower('abc') FROM BTABLE LIMIT 1",
"SELECT lower('Abc') FROM BTABLE LIMIT 1",
"SELECT lower('ABC') FROM BTABLE LIMIT 1",
// TRAF: test only ASCII for now
"SELECT upper('123') FROM BTABLE LIMIT 1",
"SELECT upper('#$+') FROM BTABLE LIMIT 1",
"SELECT lower('SS') FROM BTABLE LIMIT 1",
};
else if (tgtSQ()) query = new String[] {
"SELECT [FIRST 1] lower('abc') FROM BTABLE",
"SELECT [FIRST 1] lower('Abc') FROM BTABLE",
"SELECT [FIRST 1] lower('ABC') FROM BTABLE",
// TRAF: test only ASCII for now
"SELECT [FIRST 1] upper('123') FROM BTABLE",
"SELECT [FIRST 1] upper('#$+') FROM BTABLE",
"SELECT [FIRST 1] lower('SS') FROM BTABLE",
};
String result[] = null;
if (tgtPH()) result = new String[] {
"abc",
"abc",
"abc",
"ďďē",
"ß",
"ss",
};
else if (tgtSQ()||tgtTR()) result = new String[] {
"abc",
"abc",
"abc",
"123",
"#$+",
"ss",
};
assertEquals(query.length, result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(query[i],result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testRTrimFunction() throws Exception {
printTestDescription();
String query[] = null;
if (tgtPH()) query = new String[] {
"SELECT rtrim('') FROM BTABLE LIMIT 1",
"SELECT rtrim(' ') FROM BTABLE LIMIT 1",
"SELECT rtrim(' ') FROM BTABLE LIMIT 1",
"SELECT rtrim('abc') FROM BTABLE LIMIT 1",
"SELECT rtrim('abc ') FROM BTABLE LIMIT 1",
"SELECT rtrim('abc def') FROM BTABLE LIMIT 1",
"SELECT rtrim('abc def ') FROM BTABLE LIMIT 1",
"SELECT rtrim('ĎďĒ ') FROM BTABLE LIMIT 1",
"SELECT pk FROM VarcharKeyTest WHERE rtrim(pk)='jkl' LIMIT 1",
};
else if (tgtTR()) query = new String[] {
"SELECT rtrim('') FROM BTABLE LIMIT 1",
"SELECT rtrim(' ') FROM BTABLE LIMIT 1",
"SELECT rtrim(' ') FROM BTABLE LIMIT 1",
"SELECT rtrim('abc') FROM BTABLE LIMIT 1",
"SELECT rtrim('abc ') FROM BTABLE LIMIT 1",
"SELECT rtrim('abc def') FROM BTABLE LIMIT 1",
"SELECT rtrim('abc def ') FROM BTABLE LIMIT 1",
// TRAF: Test only ASCII for now
"SELECT rtrim('12 3 ') FROM BTABLE LIMIT 1",
"SELECT pk FROM VarcharKeyTest WHERE rtrim(pk)='jkl'",
};
else if (tgtSQ()) query = new String[] {
"SELECT [FIRST 1] rtrim('') FROM BTABLE",
"SELECT [FIRST 1] rtrim(' ') FROM BTABLE",
"SELECT [FIRST 1] rtrim(' ') FROM BTABLE",
"SELECT [FIRST 1] rtrim('abc') FROM BTABLE",
"SELECT [FIRST 1] rtrim('abc ') FROM BTABLE",
"SELECT [FIRST 1] rtrim('abc def') FROM BTABLE",
"SELECT [FIRST 1] rtrim('abc def ') FROM BTABLE",
// TRAF: Test only ASCII for now
"SELECT [FIRST 1] rtrim('12 3 ') FROM BTABLE",
"SELECT [FIRST 1] pk FROM VarcharKeyTest WHERE rtrim(pk)='jkl'",
};
String result[] = null;
if (tgtPH()) result = new String[] {
null,
null,
null,
"abc",
"abc",
"abc def",
"abc def",
"ĎďĒ",
"jkl ",
};
else if (tgtSQ()||tgtTR()) result = new String[] {
"",
"",
"",
"abc",
"abc",
"abc def",
"abc def",
"12 3",
"jkl ",
};
assertEquals(query.length, result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(query[i],result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testLTrimFunction() throws Exception {
printTestDescription();
String query[] = null;
if (tgtPH()) query = new String[] {
"SELECT ltrim('') FROM BTABLE LIMIT 1",
"SELECT ltrim(' ') FROM BTABLE LIMIT 1",
"SELECT ltrim(' ') FROM BTABLE LIMIT 1",
"SELECT ltrim('abc') FROM BTABLE LIMIT 1",
"SELECT ltrim(' abc') FROM BTABLE LIMIT 1",
"SELECT ltrim('abc def') FROM BTABLE LIMIT 1",
"SELECT ltrim(' abc def') FROM BTABLE LIMIT 1",
"SELECT ltrim(' ĎďĒ') FROM BTABLE LIMIT 1",
"SELECT pk FROM VarcharKeyTest WHERE ltrim(pk)='def' LIMIT 1",
};
else if (tgtTR()) query = new String[] {
"SELECT ltrim('') FROM BTABLE LIMIT 1",
"SELECT ltrim(' ') FROM BTABLE LIMIT 1",
"SELECT ltrim(' ') FROM BTABLE LIMIT 1",
"SELECT ltrim('abc') FROM BTABLE LIMIT 1",
"SELECT ltrim(' abc') FROM BTABLE LIMIT 1",
"SELECT ltrim('abc def') FROM BTABLE LIMIT 1",
"SELECT ltrim(' abc def') FROM BTABLE LIMIT 1",
// TRAF: Test ASCII only for now.
"SELECT ltrim(' 12 3') FROM BTABLE LIMIT 1",
"SELECT pk FROM VarcharKeyTest WHERE ltrim(pk)='def' LIMIT 1",
};
else if (tgtSQ()) query = new String[] {
"SELECT [FIRST 1] ltrim('') FROM BTABLE",
"SELECT [FIRST 1] ltrim(' ') FROM BTABLE",
"SELECT [FIRST 1] ltrim(' ') FROM BTABLE",
"SELECT [FIRST 1] ltrim('abc') FROM BTABLE",
"SELECT [FIRST 1] ltrim(' abc') FROM BTABLE",
"SELECT [FIRST 1] ltrim('abc def') FROM BTABLE",
"SELECT [FIRST 1] ltrim(' abc def') FROM BTABLE",
// TRAF: Test ASCII only for now.
"SELECT [FIRST 1] ltrim(' 12 3') FROM BTABLE",
"SELECT [FIRST 1] pk FROM VarcharKeyTest WHERE ltrim(pk)='def'",
};
String result[] = null;
if (tgtPH()) result = new String[] {
null,
null,
null,
"abc",
"abc",
"abc def",
"abc def",
"ĎďĒ",
" def",
};
else if (tgtSQ()||tgtTR()) result = new String[] {
"",
"",
"",
"abc",
"abc",
"abc def",
"abc def",
"12 3",
" def",
};
assertEquals(query.length, result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(query[i],result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
@Test
public void testSubstrFunctionOnRowKeyInWhere() throws Exception {
printTestDescription();
if (tgtPH()) conn.createStatement().execute("CREATE TABLE substr_test (s1 varchar not null, s2 varchar not null constraint pk primary key(s1,s2))");
else if (tgtSQ()||tgtTR()) conn.createStatement().execute("CREATE TABLE substr_test (s1 varchar(128) not null, s2 varchar(128) not null, constraint pk_substr_test primary key(s1,s2))");
if (tgtPH()||tgtTR()) {
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abc','a')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd','b')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abce','c')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcde','d')");
} else if (tgtSQ()) {
conn.createStatement().execute("INSERT INTO substr_test VALUES('abc','a')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcd','b')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abce','c')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcde','d')");
}
ResultSet rs = null;
if (tgtPH()) rs = conn.createStatement().executeQuery("SELECT s1 from substr_test where substr(s1,1,4) = 'abcd'");
else if (tgtSQ()||tgtTR()) rs = conn.createStatement().executeQuery("SELECT s1 from substr_test where substr(s1,1,4) = 'abcd' order by 1");
assertTrue(rs.next());
assertEquals("abcd",rs.getString(1));
assertTrue(rs.next());
assertEquals("abcde",rs.getString(1));
assertFalse(rs.next());
}
@Test
public void testRTrimFunctionOnRowKeyInWhere() throws Exception {
printTestDescription();
if (tgtPH()) conn.createStatement().execute("CREATE TABLE substr_test (s1 varchar not null, s2 varchar not null constraint pk primary key(s1,s2))");
else if (tgtSQ()||tgtTR()) conn.createStatement().execute("CREATE TABLE substr_test (s1 varchar(128) not null, s2 varchar(128) not null, constraint pk_substr_test primary key(s1,s2))");
if (tgtPH()) {
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abc','a')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd','b')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd ','c')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd ','c')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd a','c')"); // Need TRAVERSE_AND_LEAVE for cases like this
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcde','d')");
} else if (tgtTR()) {
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abc','a')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd','b')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd ','c')");
// TRAF: For SQ & TR, it uses 'PAD SPACE' implementation, 'abcd '
// and 'abcd ' are treated as the same. It has been decided that
// this behavior will not change. Changed the following 'c' to 'd'
// to make the test work.
// conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd ','c')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd ','d')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd a','e')"); // Need TRAVERSE_AND_LEAVE for cases like this
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcde','f')");
} else if (tgtSQ()) {
conn.createStatement().execute("INSERT INTO substr_test VALUES('abc','a')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcd','b')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcd ','c')");
// TRAF: For SQ & TR, it uses 'PAD SPACE' implementation, 'abcd '
// and 'abcd ' are treated as the same. SQ will see 8102 unique
// constraint error in this case. It has been decided that
// this behavior will not change. Changed the following 'c' to 'd'
// to make the test work.
// conn.createStatement().execute("INSERT INTO substr_test VALUES('abcd ','c')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcd ','d')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcd a','e')"); // Need TRAVERSE_AND_LEAVE for cases like this
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcde','f')");
}
ResultSet rs = null;
if (tgtPH()) rs = conn.createStatement().executeQuery("SELECT s1 from substr_test where rtrim(s1) = 'abcd'");
else if (tgtSQ()||tgtTR()) rs = conn.createStatement().executeQuery("SELECT s1 from substr_test where rtrim(s1) = 'abcd' order by s2");
assertTrue(rs.next());
assertEquals("abcd",rs.getString(1));
assertTrue(rs.next());
assertEquals("abcd ",rs.getString(1));
assertTrue(rs.next());
assertEquals("abcd ",rs.getString(1));
assertFalse(rs.next());
}
@Test
public void testLikeFunctionOnRowKeyInWhere() throws Exception {
printTestDescription();
if (tgtPH()) conn.createStatement().execute("CREATE TABLE substr_test (s1 varchar not null, s2 varchar not null constraint pk primary key(s1,s2))");
else if (tgtSQ()||tgtTR()) conn.createStatement().execute("CREATE TABLE substr_test (s1 varchar(128) not null, s2 varchar(128) not null, constraint pk primary key(s1,s2))");
if (tgtPH()||tgtTR()) {
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abc','a')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd','b')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd-','c')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abcd-1','c')");
conn.createStatement().execute("UPSERT INTO substr_test VALUES('abce','d')");
} else if (tgtSQ()) {
conn.createStatement().execute("INSERT INTO substr_test VALUES('abc','a')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcd','b')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcd-','c')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abcd-1','c')");
conn.createStatement().execute("INSERT INTO substr_test VALUES('abce','d')");
}
ResultSet rs = conn.createStatement().executeQuery("SELECT s1 from substr_test where s1 like 'abcd%1'");
assertTrue(rs.next());
assertEquals("abcd-1",rs.getString(1));
assertFalse(rs.next());
}
@Test
public void testTrimFunction() throws Exception {
printTestDescription();
String query[] = null;
if (tgtPH()) query = new String[] {
"SELECT trim('') FROM BTABLE LIMIT 1",
"SELECT trim(' ') FROM BTABLE LIMIT 1",
"SELECT trim(' ') FROM BTABLE LIMIT 1",
"SELECT trim('abc') FROM BTABLE LIMIT 1",
"SELECT trim(' abc') FROM BTABLE LIMIT 1",
"SELECT trim('abc ') FROM BTABLE LIMIT 1",
"SELECT trim('abc def') FROM BTABLE LIMIT 1",
"SELECT trim(' abc def') FROM BTABLE LIMIT 1",
"SELECT trim('abc def ') FROM BTABLE LIMIT 1",
"SELECT trim(' abc def ') FROM BTABLE LIMIT 1",
"SELECT trim(' ĎďĒ ') FROM BTABLE LIMIT 1",
"SELECT pk FROM VarcharKeyTest WHERE trim(pk)='ghi'",
};
else if (tgtTR()) query = new String[] {
"SELECT trim('') FROM BTABLE LIMIT 1",
"SELECT trim(' ') FROM BTABLE LIMIT 1",
"SELECT trim(' ') FROM BTABLE LIMIT 1",
"SELECT trim('abc') FROM BTABLE LIMIT 1",
"SELECT trim(' abc') FROM BTABLE LIMIT 1",
"SELECT trim('abc ') FROM BTABLE LIMIT 1",
"SELECT trim('abc def') FROM BTABLE LIMIT 1",
"SELECT trim(' abc def') FROM BTABLE LIMIT 1",
"SELECT trim('abc def ') FROM BTABLE LIMIT 1",
"SELECT trim(' abc def ') FROM BTABLE LIMIT 1",
// TRAF: Test only ASCII for now.
"SELECT trim(' 12 3 ') FROM BTABLE LIMIT 1",
"SELECT pk FROM VarcharKeyTest WHERE trim(pk)='ghi'",
};
else if (tgtSQ()) query = new String[] {
"SELECT [FIRST 1] trim('') FROM BTABLE",
"SELECT [FIRST 1] trim(' ') FROM BTABLE",
"SELECT [FIRST 1] trim(' ') FROM BTABLE",
"SELECT [FIRST 1] trim('abc') FROM BTABLE",
"SELECT [FIRST 1] trim(' abc') FROM BTABLE",
"SELECT [FIRST 1] trim('abc ') FROM BTABLE",
"SELECT [FIRST 1] trim('abc def') FROM BTABLE",
"SELECT [FIRST 1] trim(' abc def') FROM BTABLE",
"SELECT [FIRST 1] trim('abc def ') FROM BTABLE",
"SELECT [FIRST 1] trim(' abc def ') FROM BTABLE",
// TRAF: Test only ASCII for now.
"SELECT [FIRST 1] trim(' 12 3 ') FROM BTABLE",
"SELECT pk FROM VarcharKeyTest WHERE trim(pk)='ghi'",
};
String result[] = null;
if (tgtPH()) result = new String[] {
null,
null,
null,
"abc",
"abc",
"abc",
"abc def",
"abc def",
"abc def",
"abc def",
"ĎďĒ",
" ghi ",
};
else if (tgtSQ()||tgtTR()) result = new String[] {
"",
"",
"",
"abc",
"abc",
"abc",
"abc def",
"abc def",
"abc def",
"abc def",
"12 3",
" ghi ",
};
assertEquals(query.length, result.length);
try {
initTableValues();
for (int i = 0; i < query.length; i++) {
PreparedStatement statement = conn.prepareStatement(query[i]);
ResultSet rs = statement.executeQuery();
assertTrue(rs.next());
assertEquals(query[i],result[i], rs.getString(1));
assertFalse(rs.next());
}
} finally {
}
}
}