You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by my...@apache.org on 2008/08/13 03:12:24 UTC
svn commit: r685408 - in
/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests:
master/ master/DerbyNet/ master/DerbyNetClient/ suites/ tests/lang/
Author: myrnavl
Date: Tue Aug 12 18:12:24 2008
New Revision: 685408
URL: http://svn.apache.org/viewvc?rev=685408&view=rev
Log:
DERBY-3802; convert lang.optimizerOverrides.sql to junit test.
Patch contributed by Junjie Peng
Added:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OptimizerOverridesTest.java (with props)
Removed:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/optimizerOverrides.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/optimizerOverrides.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/optimizerOverrides.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/optimizerOverrides.sql
Modified:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbynetmats.runall
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude?rev=685408&r1=685407&r2=685408&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude Tue Aug 12 18:12:24 2008
@@ -12,7 +12,6 @@
# derbynet/sysinfo.java - needs other properties
# derbynet/sysinfo_withproperties.java - needs other properties
# following fail for various reasons, many related to not being able to connect:
-# lang/optimizerOverrides.sql
# lang/wisconsin.java
# jdbcapi/derbyStress.java
# jdbcapi/maxfieldsize.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude?rev=685408&r1=685407&r2=685408&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude Tue Aug 12 18:12:24 2008
@@ -10,7 +10,6 @@
# derbynet/runtimeinfo.java - fails with already existing threads (maybe intermittent)
# derbynet/sysinfo.java - fails because not access to java.class.path
# derbynet/sysinfo_withproperties.java - fails because not access to java.class.path
-# lang/optimizerOverrides.sql - fails...
# lang/wisconsin.java - checks depend on dir structure
# jdbcapi/maxfieldsize.java - fails...??? (but not when run by itself)
#
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall?rev=685408&r1=685407&r2=685408&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall Tue Aug 12 18:12:24 2008
@@ -30,7 +30,6 @@
lang/maxMemPerTab.java
lang/nestedCommit.sql
lang/openScans.sql
-lang/optimizerOverrides.sql
lang/orderbyElimination.sql
lang/outerjoin.sql
lang/outparams.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbynetmats.runall
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbynetmats.runall?rev=685408&r1=685407&r2=685408&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbynetmats.runall (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbynetmats.runall Tue Aug 12 18:12:24 2008
@@ -8,7 +8,6 @@
derbynet/testProtocol.java
derbynet/timeslice.java
jdbcapi/metadataMultiConn.java
-lang/optimizerOverrides.sql
lang/holdCursorIJ.sql
lang/wisconsin.java
lang/ShutdownDatabase.java
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OptimizerOverridesTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OptimizerOverridesTest.java?rev=685408&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OptimizerOverridesTest.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OptimizerOverridesTest.java Tue Aug 12 18:12:24 2008
@@ -0,0 +1,546 @@
+/*
+
+ Derby - Class org.apache.derbyTesting.functionTests.tests.lang.OptimizerOverridingTest
+
+ 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 org.apache.derbyTesting.functionTests.tests.lang;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import junit.framework.Test;
+
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
+import org.apache.derbyTesting.junit.JDBC;
+import org.apache.derbyTesting.junit.RuntimeStatisticsParser;
+import org.apache.derbyTesting.junit.SQLUtilities;
+import org.apache.derbyTesting.junit.TestConfiguration;
+
+/**
+ * Test the optimizer overrides.
+ */
+public class OptimizerOverridesTest extends BaseJDBCTestCase {
+ private static final String[][] FULL_TABLE =
+ new String[][]{
+ {"1", "1", "1"},
+ {"2", "2", "2"},
+ {"3", "3", "3"},
+ {"4", "4", "4"},
+ };
+
+ public OptimizerOverridesTest(String name) {
+ super(name);
+ }
+
+ public static Test suite(){
+ Test suite = TestConfiguration.defaultSuite(
+ OptimizerOverridesTest.class, false);
+ suite = new CleanDatabaseTestSetup(suite){
+
+ /* Create tables, indices and views.
+ * @see org.apache.derbyTesting.junit.CleanDatabaseTestSetup#decorateSQL(java.sql.Statement)
+ */
+ protected void decorateSQL(Statement st) throws SQLException {
+ st.getConnection().setAutoCommit(false);
+
+ st.addBatch("create table t1 (c1 int, " +
+ "c2 int, c3 int," +
+ " constraint cons1 primary key(c1, c2))");
+ st.addBatch("create table t2 (c1 int not null, " +
+ "c2 int not null, c3 int, " +
+ "constraint cons2 unique(c1, c2))");
+
+ st.addBatch("insert into t1 values (1, 1, 1), " +
+ "(2, 2, 2), (3, 3, 3), (4, 4, 4)");;
+ st.addBatch("insert into t2 values (1, 1, 1), " +
+ "(2, 2, 2), (3, 3, 3), (4, 4, 4)");
+
+ st.addBatch("create index t1_c1c2c3 on t1(c1, c2, c3)");
+ st.addBatch("create index t1_c3c2c1 on t1(c3, c2, c1)");
+ st.addBatch("create index t1_c1 on t1(c1)");
+ st.addBatch("create index t1_c2 on t1(c2)");
+ st.addBatch("create index t1_c3 on t1(c3)");
+ st.addBatch("create index \"t1_c2c1\" on t1(c2, c1)");
+ st.addBatch("create index t2_c1c2c3 on t2(c1, c2, c3)");
+ st.addBatch("create index t2_c3c2c1 on t2(c3, c2, c1)");
+ st.addBatch("create index t2_c1 on t2(c1)");
+ st.addBatch("create index t2_c2 on t2(c2)");
+ st.addBatch("create index t2_c3 on t2(c3)");
+
+ st.addBatch("create view v1 as select * from t1 " +
+ "--derby-properties index = t1_c1");
+ st.addBatch("create view v2 as select t1.* from t1, t2");
+ st.addBatch("create view v3 as select * from v1");
+ st.addBatch("create view neg_v1 as select * from t1" +
+ " --derby-properties asdf = fdsa");
+
+ st.executeBatch();
+ }
+ };
+
+ return suite;
+ }
+
+ /**
+ * Negative tests for bad formats.
+ */
+ public void testBadFormats() throws SQLException{
+ Statement st = createStatement();
+
+ assertStatementError("42X01", st,
+ "select \n" +
+ "-- derby-properties index = t1_c1 \n" +
+ "* from t1");
+
+ assertStatementError("42X01", st,
+ "select * -- derby-properties index = t1_c1 \n" +
+ "from t1");
+
+ assertStatementError("42X01", st,
+ "select * -- derby-properties\n" +
+ " index = t1_c1 from t1");
+
+ st.close();
+ }
+
+ /**
+ * Test bad properties.
+ */
+ public void testBadProperties() throws SQLException{
+ Statement st = createStatement();
+
+ assertStatementError("42Y44", st, "select * from t1" +
+ " --derby-properties asdf = i1");
+
+ assertStatementError("42Y44", st, "select * from t1" +
+ " exposedname --derby-properties asdf = i1");
+
+ assertStatementError("42Y44", st,
+ "select * from neg_v1");
+
+ assertStatementError("42Y44", st,
+ "select * from t1 --derby-properties i = a\n" +
+ "left outer join t2 on 1=1");
+
+ assertStatementError("42Y44", st,
+ "select * from t1 left outer join t2 " +
+ "--derby-properties i = t1_c1\n on 1=1");
+
+ assertStatementError("42Y46", st,
+ "select * from t1 left outer join t2 " +
+ "--derby-properties index = t1_c1\n on 1=1");
+
+ assertStatementError("42Y46", st,
+ "select * from t1 right outer join t2 " +
+ "--derby-properties index = t1_c1\n on 1=1");
+
+ st.close();
+ }
+
+ /**
+ * Test not existing values of property.
+ */
+ public void testNonExistingPropertyValues()
+ throws SQLException{
+ Statement st = createStatement();
+
+ assertStatementError("42Y46", st, "select * from t1 " +
+ "--derby-properties index = t1_notexists");
+
+ assertStatementError("42Y46", st,
+ "select * from t1 exposedname " +
+ "--derby-properties index = t1_notexists");
+
+ assertStatementError("42Y48", st, "select * from t1 " +
+ "--derby-properties constraint = t1_notexists");
+
+ assertStatementError("42Y48", st,
+ "select * from t1 exposedname " +
+ "--derby-properties constraint = t1_notexists");
+
+ assertStatementError("42Y56", st,
+ "select * from t1 a, t1 b " +
+ "--derby-properties joinStrategy = asdf");
+
+ st.close();
+ }
+
+ /**
+ * Make sure following fragments get treated as comments.
+ */
+ public void testFragmentsAsComments() throws SQLException{
+ String[] frags = {"--d", "-- de", "-- der",
+ "--derb", "--derby comment",
+ "-- derby another comment", "--derby-",
+ "--derby-p", "--derby-pr", "--derby-pro",
+ "--derby-prop", "--derby-prope", "--derby-proper",
+ "-- derby-propert", "-- derby-properti",
+ "-- derby-propertie", "-- derby-propertiex"
+ };
+
+ Statement st = createStatement();
+
+ for(int i = 0; i < frags.length; i++)
+ JDBC.assertFullResultSet(
+ st.executeQuery(
+ frags[i] + "\n VALUES 1 "),
+ new String [][] {{"1"}});
+
+ st.close();
+ }
+
+ /**
+ * Test both index and constraint.
+ */
+ public void testMixedIndexAndConstraint()
+ throws SQLException{
+ Statement st = createStatement();
+
+ assertStatementError("42Y50", st, "select * from t1" +
+ " --derby-properties index = t1_c1, " +
+ "constraint = cons1");
+
+ assertStatementError("42Y50", st, "select * from t1" +
+ " exposedname --derby-properties " +
+ "index = t1_c1, constraint = cons1");
+
+ st.close();
+ }
+
+ /**
+ * Index which includes columns in for update of list.
+ */
+ public void testPropertyForUpdate() throws SQLException{
+ Statement st = createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_UPDATABLE);
+
+ JDBC.assertFullResultSet(st.executeQuery(
+ "select * from t1 " +
+ "--derby-properties index = t1_c1\n" +
+ "for update"), FULL_TABLE);
+
+ JDBC.assertFullResultSet(st.executeQuery(
+ "select * from t1 exposedname " +
+ "--derby-properties index = t1_c1\n" +
+ "for update"), FULL_TABLE);
+
+ JDBC.assertFullResultSet(st.executeQuery(
+ "select * from t1 " +
+ "--derby-properties index = t1_c1\n" +
+ "for update of c2, c1"), FULL_TABLE);
+
+ JDBC.assertFullResultSet(st.executeQuery(
+ "select * from t1 exposedname " +
+ "--derby-properties index = t1_c1\n" +
+ "for update of c2, c1"), FULL_TABLE);
+
+ JDBC.assertFullResultSet(st.executeQuery(
+ "select * from t1 " +
+ "--derby-properties constraint = cons1\n" +
+ "for update"), FULL_TABLE);
+
+ JDBC.assertFullResultSet(st.executeQuery(
+ "select * from t1 exposedname " +
+ "--derby-properties constraint = cons1\n" +
+ "for update"), FULL_TABLE);
+
+ JDBC.assertFullResultSet(st.executeQuery(
+ "select * from t1 " +
+ "--derby-properties constraint = cons1\n" +
+ "for update of c2, c1"), FULL_TABLE);
+
+ JDBC.assertFullResultSet(st.executeQuery(
+ "select * from t1 exposedname " +
+ "--derby-properties constraint = cons1\n" +
+ "for update of c2, c1"), FULL_TABLE);
+
+ st.close();
+ }
+
+ public void testInvalidJoinStrategy() throws SQLException{
+ Statement st = createStatement();
+
+ assertStatementError("42Y50", st, "select * from t1" +
+ " --derby-properties index = t1_c1, " +
+ "constraint = cons1");
+
+ assertStatementError("42Y50", st, "select * from t1" +
+ " exposedname --derby-properties " +
+ "index = t1_c1, constraint = cons1");
+
+ st.close();
+ }
+
+ /**
+ * Verify that statements are dependent
+ * on specified index.
+ */
+ public void testDependenceOnIndex() throws SQLException{
+ PreparedStatement ps =
+ prepareStatement("select * from t1 " +
+ "--derby-properties index = t1_c1");
+
+ JDBC.assertFullResultSet(ps.executeQuery(),
+ new String[][]{
+ {"1", "1", "1"},
+ {"2", "2", "2"},
+ {"3", "3", "3"},
+ {"4", "4", "4"},
+ });
+
+ Statement st = createStatement();
+ st.executeUpdate("drop index t1_c1");
+
+ assertStatementError("42Y46", ps);
+
+ ps.close();
+
+ //add index to avoid exception when deleted in tearDown().
+ st.executeUpdate("create index t1_c1 on t1(c1)");
+
+ st.close();
+ }
+
+ /**
+ * Verify that statements are dependent
+ * on specified constraint.
+ */
+ public void testDependenceOnConstraint()
+ throws SQLException{
+ PreparedStatement ps =
+ prepareStatement("select * from t1 " +
+ "--derby-properties constraint = cons1");
+
+ JDBC.assertFullResultSet(ps.executeQuery(), FULL_TABLE);
+
+ Statement st = createStatement();
+ st.executeUpdate("alter table t1 drop constraint cons1");
+
+ assertStatementError("42Y48", ps);
+
+ //add cons1 to restore the test environment.
+ st.executeUpdate("alter table t1 " +
+ "add constraint cons1 primary key(c1, c2)");
+
+ ps.close();
+
+ st.close();
+ }
+
+ /**
+ * Test case insensitivity, spelling sensitivity
+ * and delimited index.
+ */
+ public void testSpell() throws SQLException{
+ Statement st = createStatement();
+
+ st.execute("CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
+
+ //the token derby-properties is case insensitive.
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1" +
+ " --DeRbY-pRoPeRtIeS index = t1_c1"),
+ FULL_TABLE);
+ RuntimeStatisticsParser rtsp =
+ SQLUtilities.getRuntimeStatisticsParser(st);
+ assertTrue(rtsp.usedSpecificIndexForIndexScan("T1", "T1_C1"));
+
+ //-- misspell derby-properties and make sure that
+ //it gets treated as a regular comment
+ //rather than optimizer override
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1 " +
+ " --DeRbY-pRoPeRtIeAAAA index = t1_c1"),
+ FULL_TABLE);
+ rtsp = SQLUtilities.getRuntimeStatisticsParser(st);
+ assertTrue("not using t1_c1, but what derby thinks is best index.",
+ rtsp.usedSpecificIndexForIndexScan("T1", "T1_C1C2C3"));
+
+
+ //"--DeRbY-pRoPeRtIeSAAAA index = t1_c1" is
+ //treated as "--DeRbY-pRoPeRtIeS AAAA index = t1_c1"
+ assertStatementError("42Y44", st, "select * from t1 " +
+ " --DeRbY-pRoPeRtIeSAAAA index = t1_c1");
+
+ //-- force index, delimited identifier
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1 " +
+ "--derby-properties index = \"t1_c2c1\""),
+ FULL_TABLE);
+ rtsp = SQLUtilities.getRuntimeStatisticsParser(st);
+ assertTrue(rtsp.usedSpecificIndexForIndexScan("T1", "t1_c2c1"));
+
+ //If the property spelled wrong gets treated
+ //as an optimizer override, the following test will fail.
+ assertStatementError("42Y46", st, "select * from t1 " +
+ " --DeRbY-pRoPeRtIeS index = t1_notexisting");
+
+ st.close();
+ }
+
+ public void testNullValue() throws SQLException{
+ Statement st = createStatement();
+
+ st.execute("CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
+
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1 " +
+ "--derby-properties index = null"), FULL_TABLE);
+ RuntimeStatisticsParser rtsp =
+ SQLUtilities.getRuntimeStatisticsParser(st);
+ assertTrue("force table scan", rtsp.usedTableScan());
+
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1 " +
+ "--derby-properties constraint = null"), FULL_TABLE);
+
+ assertStatementError("42Y56", st, "select * from t1 " +
+ "--derby-properties joinStrategy = null");
+
+ st.close();
+ }
+
+ public void testJoin() throws SQLException{
+ Statement st = createStatement();
+
+ st.execute("CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
+ JDBC.assertFullResultSet(
+ st.executeQuery("select 1 from t1 a" +
+ " --derby-properties index = t1_c1\n" +
+ ",t2 b --derby-properties index = t2_c2"),
+ new String[][]{
+ {"1"}, {"1"}, {"1"}, {"1"},
+ {"1"}, {"1"}, {"1"}, {"1"},
+ {"1"}, {"1"}, {"1"}, {"1"},
+ {"1"}, {"1"}, {"1"}, {"1"},
+ });
+ RuntimeStatisticsParser rtsp =
+ SQLUtilities.getRuntimeStatisticsParser(st);
+ assertTrue(rtsp.usedSpecificIndexForIndexScan("T1", "T1_C1"));
+ assertTrue(rtsp.usedSpecificIndexForIndexScan("T2", "T2_C2"));
+
+ JDBC.assertFullResultSet(
+ st.executeQuery("select 1 from " +
+ " --derby-properties joinOrder=fixed\n" +
+ "t1, t2 where t1.c1 = t2.c1"),
+ new String[][]{{"1"}, {"1"}, {"1"}, {"1"}, }
+ );
+
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1" +
+ " --derby-properties index = t1_c1\n" +
+ "left outer join t2 " +
+ "--derby-properties index = t2_c2\n" +
+ "on t1.c1 = t2.c1"),
+ new String[][]{
+ {"1", "1", "1", "1", "1", "1"},
+ {"2", "2", "2", "2", "2", "2"},
+ {"3", "3", "3", "3", "3", "3"},
+ {"4", "4", "4", "4", "4", "4"},
+ });
+ rtsp =
+ SQLUtilities.getRuntimeStatisticsParser(st);
+ assertTrue(rtsp.usedSpecificIndexForIndexScan("T1", "T1_C1"));
+ assertTrue(rtsp.usedSpecificIndexForIndexScan("T2", "T2_C2"));
+
+ st.close();
+ }
+
+ /**
+ * Comparisons that can't get pushed down.
+ */
+ public void testComparision() throws SQLException{
+ Statement st = createStatement();
+
+ st.execute("CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
+
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1" +
+ " --derby-properties index = t1_c1\n" +
+ "where c1 = c1"), FULL_TABLE);
+ RuntimeStatisticsParser rtsp =
+ SQLUtilities.getRuntimeStatisticsParser(st);
+ assertTrue(rtsp.usedSpecificIndexForIndexScan("T1", "T1_C1"));
+
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1" +
+ " --derby-properties index = t1_c1\n" +
+ "where c1 = c2"), FULL_TABLE);
+ rtsp = SQLUtilities.getRuntimeStatisticsParser(st);
+ assertTrue(rtsp.usedSpecificIndexForIndexScan("T1", "T1_C1"));
+
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1" +
+ " --derby-properties index = t1_c1\n" +
+ "where c1 + 1 = 1 + c1"), FULL_TABLE);
+ rtsp = SQLUtilities.getRuntimeStatisticsParser(st);
+ assertTrue(rtsp.usedSpecificIndexForIndexScan("T1", "T1_C1"));
+
+ st.close();
+ }
+
+ public void testNestedLoopJoinStrategy()
+ throws SQLException{
+ Statement st = createStatement();
+
+ st.execute("CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
+
+ JDBC.assertFullResultSet(
+ st.executeQuery("select * from t1 a, t1 b " +
+ "--derby-properties joinStrategy = nestedloop\n" +
+ "where a.c1 = b.c1"),
+ new String[][]{
+ {"1", "1", "1", "1", "1", "1"},
+ {"2", "2", "2", "2", "2", "2"},
+ {"3", "3", "3", "3", "3", "3"},
+ {"4", "4", "4", "4", "4", "4"},
+ });
+// RuntimeStatisticsParser rtsp =
+// SQLUtilities.getRuntimeStatisticsParser(st);
+// assertTrue(rtsp.usedHashJoin());
+// assertTrue("not using t1_c1, but what derby thinks is best index.",
+// rtsp.usedSpecificIndexForIndexScan("T1", "T1_C1C2C3"));
+
+ st.close();
+ }
+
+ /**
+ *Negative test. insertModeValue is not available to a user
+ *and hence will give a syntax error. There are some
+ *undocumented properties which are allowed within Derby
+ *engine only and insertModeValue is one of them.
+ */
+ public void testInsertModeValue() throws SQLException{
+ Statement st = createStatement();
+
+ st.executeUpdate("create table temp1 (c1 int, c2 int, " +
+ "c3 int, constraint temp1cons1 primary key(c1, c2))");
+
+ assertStatementError("42X01", st,
+ "insert into temp1 (c1,c2,c3)" +
+ " -- derby-properties insertModeValue=replace\n" +
+ "select * from t1");
+
+ dropTable("temp1");
+
+ st.close();
+ }
+}
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OptimizerOverridesTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java?rev=685408&r1=685407&r2=685408&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java Tue Aug 12 18:12:24 2008
@@ -174,6 +174,7 @@
suite.addTest(NullsTest.suite());
suite.addTest(ArithmeticTest.suite());
suite.addTest(ConstantExpressionTest.suite());
+ suite.addTest(OptimizerOverridesTest.suite());
return suite;
}