public class MergeStatementTest extends GeneratedColumnsHelper
Test the MERGE statement (see DERBY-3155).
Modifier and Type | Class and Description |
---|---|
static class |
MergeStatementTest.Collated |
Modifier and Type | Field and Description |
---|---|
private static java.util.ArrayList<java.lang.String[]> |
_triggerHistory |
private static java.lang.String |
ALICE |
private static java.lang.String |
BEGIN_HTML |
private static java.lang.String |
CARDINALITY_VIOLATION |
private static java.lang.String |
COLUMN_COUNT_MISMATCH |
private static java.lang.String |
COLUMN_NOT_IN_TABLE |
private static java.lang.String |
DUPLICATE_COLUMNS |
private static java.lang.String |
DUPLICATE_SET_COLUMNS |
private static java.lang.String |
END_HTML |
private static java.lang.String |
FRANK |
private static java.lang.String[] |
LEGAL_USERS |
private static java.lang.String |
MISSING_TABLE |
private static java.lang.String |
NO_AGGREGATE_IN_MATCHING |
private static java.lang.String |
NO_DCL_IN_MERGE |
private static java.lang.String |
NO_DML_IN_BEFORE_TRIGGERS |
private static java.lang.String |
NO_ROWS_AFFECTED |
private static java.lang.String |
NO_SUBQUERIES_IN_MATCHED_CLAUSE |
private static java.lang.String |
NO_SYNONYMS_IN_MERGE |
private static java.lang.String |
PARAMETER_NOT_SET |
private static java.lang.String |
RUTH |
private static java.lang.String |
SAME_EXPOSED_NAME |
private static java.lang.String |
SOURCE_MUST_BE_BASE_VIEW_OR_VTI |
private static java.lang.String |
TARGET_MUST_BE_BASE |
private static java.lang.String |
TEST_DBO |
private static java.lang.String |
TONY |
private static java.lang.String |
TRACE_FILE_NAME |
private static java.lang.String[] |
TRIGGER_HISTORY_COLUMNS |
BAD_BEFORE_TRIGGER, BAD_CAST, BAD_FOREIGN_KEY_ACTION, CANT_CONTAIN_NULLS, CANT_MODIFY_IDENTITY, CANT_OVERRIDE_GENERATION_CLAUSE, CANT_REFERENCE_GENERATED_COLUMN, CASCADED_COLUMN_DROP_WARNING, COLUMN_OUT_OF_SCOPE, CONSTRAINT_DROPPED_WARNING, CONSTRAINT_VIOLATION, DUPLICATE_CLAUSE, FORBIDDEN_DROP_TRIGGER, FORBIDDEN_ORDERING_OPERATION, FOREIGN_KEY_VIOLATION, GRANT_REVOKE_NOT_ALLOWED, ILLEGAL_ADD_DEFAULT, ILLEGAL_AGG, ILLEGAL_AGGREGATE, ILLEGAL_COMPARISON, ILLEGAL_DUPLICATE, ILLEGAL_RENAME, ILLEGAL_STORAGE, ILLEGAL_UDT_CLASS, JAVA_EXCEPTION, LACK_COLUMN_PRIV, LACK_EXECUTE_PRIV, LACK_TABLE_PRIV, LACK_USAGE_PRIV, LANG_INVALID_USE_OF_DEFAULT, LEXICAL_ERROR, LOCK_TIMEOUT, MISSING_OBJECT, NEED_EXPLICIT_DATATYPE, NO_GENERIC_PERMISSION, NO_SELECT_OR_UPDATE_PERMISSION, NO_TABLE_PERMISSION, NON_EMPTY_SCHEMA, NONEXISTENT_OBJECT, NOT_IMPLEMENTED, NOT_NULL_NEEDS_DATATYPE, NOT_NULL_VIOLATION, OBJECT_DOES_NOT_EXIST, OPERATION_FORBIDDEN, REDUNDANT_CLAUSE, ROUTINE_CANT_ISSUE_SQL, ROUTINE_DEPENDS_ON_TYPE, STRING_TRUNCATION, SYNTAX_ERROR, TABLE_DEPENDS_ON_TYPE, TOO_MUCH_CONTENTION, TRIGGER_DROPPED_WARNING, UNSTABLE_RESULTS, VIEW_DEPENDENCY
DEFAULT_DB_DIR, DERBY_LOG, ERRORSTACKTRACEFILE
Constructor and Description |
---|
MergeStatementTest(java.lang.String name)
Create a new instance.
|
Modifier and Type | Method and Description |
---|---|
static java.sql.Blob |
add(java.sql.Blob left,
java.sql.Blob right)
add the values of two blobs
|
static byte[] |
add(byte[] left,
byte[] right)
add the values of two byte arrays
|
static java.sql.Clob |
add(java.sql.Clob left,
java.sql.Clob right)
concatenate two clobs
|
static void |
addHistoryRow(java.lang.String actionString,
java.lang.Integer actionValue)
Procedure for adding trigger history
|
static void |
addHistoryRow(java.lang.String actionString,
java.lang.String actionValue)
Procedure for adding trigger history
|
void |
atest_015_bug_6414()
Verify that the UPDATE actions of MERGE statements behave like ordinary UPDATE statements
in their treatment of DEFAULT values for identity columns.
|
private java.sql.Connection |
bounceDatabase(java.lang.String newUser) |
static void |
countRows(java.lang.String candidateName,
java.lang.String actionString)
Trigger-called procedure for counting rows in a candidate table and then inserting
the result in a history table.
|
private void |
enableSQLAuthorization()
Make sure that SQL authorization is turned on
|
static boolean |
equals(java.sql.Blob left,
java.sql.Blob right)
Function for comparing two blob values
|
static boolean |
equals(java.sql.Clob left,
java.sql.Clob right)
Function for comparing two clob values
|
static boolean |
equals(java.lang.String left,
java.lang.String right)
Function for comparing two long varchar values
|
java.lang.String |
expectedCollation()
Return the expected collation of this database
|
static int |
getCell(java.sql.Blob blob,
long idx)
Get the 0-based index into the blob
|
static java.lang.String |
getCell(java.sql.Clob clob,
long idx)
Get the 0-based index into the clob
|
static java.sql.Connection |
getNestedConnection() |
private void |
grantPermission(java.sql.Connection conn,
java.lang.String permission) |
static java.sql.ResultSet |
history()
Table function for listing the contents of the trigger record
|
static int |
illegalFunction()
Illegal function which performs sql updates
|
static IntegerArrayVTI |
integerList_023()
Table function for returning some tuples of ints
|
static java.sql.Blob |
makeBlob(int... inputs)
Function for making a byte array from an array of ints
|
static java.sql.Blob |
makeBlob(int repeatCount,
int... inputs)
Function for making a big Blob by repeating the inputs a number of times
|
static byte[] |
makeByteArray(java.lang.Integer... inputs)
Function for making a byte array from an array of ints
|
static java.sql.Clob |
makeClob(int repeatCount,
java.lang.String... inputs)
Function for making a big Clob by repeating the inputs a number of times
|
private java.lang.String |
makeHashJoinMerge(java.lang.String original)
Convert a MERGE statement which uses a nested join strategy
into an equivalent MERGE statement which uses a hash join
strategy.
|
static java.lang.Integer |
nop(java.lang.Integer value)
Function for returning an arbitrary integer value
|
private void |
populate_002(java.sql.Connection conn) |
private void |
populate_003(java.sql.Connection conn) |
private void |
populate_004(java.sql.Connection conn) |
private void |
populate_005(java.sql.Connection conn) |
private void |
populate_006(java.sql.Connection conn) |
private void |
populate_012(java.sql.Connection conn) |
private void |
populate_018(java.sql.Connection conn) |
private void |
populate_019(java.sql.Connection conn) |
private void |
populate_023_2(java.sql.Connection conn) |
private void |
populate_023(java.sql.Connection conn) |
private void |
populate_050(java.sql.Connection conn,
java.lang.String initialTargetValues,
java.lang.String initialSourceValues) |
static java.sql.Blob |
reverse(java.sql.Blob inputBlob)
flip the order of bytes in a blob
|
static byte[] |
reverse(byte[] input)
flip the order of bytes in an array
|
static java.sql.Clob |
reverse(java.sql.Clob inputClob)
flip the order of characters in a clob
|
static java.lang.String |
reverse(java.lang.String inputString)
flip the order of characterss in a String
|
private void |
revokePermission(java.sql.Connection conn,
java.lang.String permission) |
protected void |
setUp() |
static IntegerArrayVTI |
singlerow_028()
Table function returning one row
|
private static junit.framework.Test |
standardDecoration(boolean withCollation)
Decorate a test with standard decorators.
|
static junit.framework.Test |
suite()
Construct top level suite in this JUnit test
|
static void |
sumColumn(java.lang.String candidateName,
java.lang.String columnName,
java.lang.String actionString)
Trigger-called procedure for summing a column in a candidate table and then inserting
the result in a history table.
|
void |
test_001_badSyntax()
Test some bad syntax.
|
void |
test_002_deleteAction()
Test the delete action.
|
void |
test_003_cascadingDeleteAction()
Test delete action involving subsequent cascaded deletes.
|
void |
test_004_deleteActionStatementTriggers()
Test delete action involving before and after statement triggers.
|
void |
test_005_deleteActionRowTriggers()
Test delete action involving before and after row triggers.
|
void |
test_006_deleteWithTransitionTableSource()
Test delete action whose source table is a trigger transition table.
|
void |
test_007_insertGeneratedColumnsAndDefaults()
Test insert action with generated columns and defaults.
|
void |
test_008_insertAndCheckConstraint()
Test insert action with a check constraint.
|
void |
test_009_insertAndUniqueForeignConstraint()
Test insert action with a unique and foreign key constraints.
|
void |
test_010_insertStatementTriggers()
Test insert action with before and after statement level triggers.
|
void |
test_011_insertRowTriggers()
Test insert action with before and after row level triggers.
|
void |
test_012_insertWithTransitionTableSource()
Test insert action whose source table is a trigger transition table.
|
void |
test_013_insertAndDelete()
Test combined insert and delete actions.
|
void |
test_014_basicUpdate()
Test basic update action.
|
void |
test_016_updateWithStatementTriggers()
Test before and after statement level triggers fired by MERGE statements.
|
void |
test_017_updateWithRowTriggers()
Test before and after row level triggers fired by MERGE statements.
|
void |
test_018_updateFromTriggerTransitionTables()
Test MERGE statements with UPDATE actions whose source tables are
trigger transition tables.
|
void |
test_019_insertUpdateDelete()
Test combined insert, update, delete actions.
|
void |
test_020_updateWithCheckConstraint()
Test check constraints fired by UPDATE actions.
|
void |
test_021_updateWithForeignAndCheckConstraint()
Test foreign key constraints with check constraints fired by UPDATE actions.
|
void |
test_022_updateWithForeignPrimaryAndCheckConstraint()
Test primary key constraints with check constraints fired by UPDATE actions.
|
void |
test_023_correlationNames()
Test correlation names in MERGE statements.
|
void |
test_024_mergeNotAllowedInBeforeTriggers()
Verify that BEFORE triggers can't fire MERGE statements.
|
void |
test_025_noInsertList()
Verify that the INSERT list can be omitted.
|
void |
test_026_otherTableTypes()
Verify that MERGE works with system tables and global temporary tables.
|
void |
test_027_correlationNamesInSetClauses()
Verify that correlation names on the left side of SET clauses are replaced properly.
|
void |
test_028_basicRowTrigger()
Verify that you can drive MERGE statements from row-based triggers.
|
void |
test_029_scanViaIndex()
This case tests a problem query which causes an index scan to
be selected for the target table.
|
void |
test_030_SQLRef_serialization()
Verify the fix to a query which broke the serialization of
row locations.
|
void |
test_032_noSubqueriesInMatchedClauses()
For the time being, forbid subqueries in WHEN [ NOT ] MATCHED clauses.
|
void |
test_033_identicalNames()
Correctly resolve column references using a source and target
whose table and column names are identical but which live in different
schemas.
|
void |
test_034_noSynonyms()
Synonyms not allowed as source or target tables in MERGE statements.
|
void |
test_035_leftSideOfSet()
Verify that table identifiers can be used or omitted on the left
side of SET clauses.
|
void |
test_036_derivedColumnLists()
Don't allow derived column lists in MERGE statements..
|
void |
test_037_parameters()
Verify that you can use ?
|
void |
test_038_parameters()
Verify that you can use ?
|
void |
test_039_indexProbe()
Verify correct behavior when the target table is read via index probing.
|
void |
test_040_valuesView()
Verify correct behavior when source table is a values clause wrapped in a view.
|
void |
test_041_cardinalityViolations()
Verify the same target row can't be touched twice by a MERGE statement.
|
void |
test_042_missingSchema()
Verify that we don't unnecessarily raise missing schema errors.
|
void |
test_043_correlationNamesAddedColumns()
Verify correlation names with columns added in order to
support triggers.
|
void |
test_044_deletePrivileges()
Verify privileges needed for DELETE actions.
|
void |
test_045_insertPrivileges()
Verify privileges needed for INSERT actions.
|
void |
test_046_udtCasts()
Verify UDT privileges for CASTs in INSERT and DELETE actions.
|
void |
test_047_updatePrivileges()
Verify privileges needed for UPDATE actions.
|
void |
test_048_updateUdtCasts()
Verify privileges needed for CASTs involving UPDATE actions.
|
void |
test_049_allPrivileges()
Verify privileges needed for all actions.
|
void |
test_050_allDatatypes()
Test all datatypes in ON clauses, matching restrictions, and as INSERT/UPDATE values.
|
void |
test_051_multiBlob()
Test multiple references to blob columns.
|
void |
test_052_multiClob()
Test multiple references to clob columns.
|
void |
test_053_nullGeneratedColumns()
Test MERGE statements involving generated columns which evaluate to null.
|
void |
test_054_triggersOnGeneratedColumns()
Test MERGE statements involving triggers on generated columns.
|
void |
test_055_triggersMultiBlob()
Test MERGE statements which read BLOBs multiple times when running triggers.
|
void |
test_056_triggersMultiClob()
Test MERGE statements which read CLOBs multiple times when running triggers.
|
void |
test_057_deferredDelete()
Test that deferred deletes buffer up the columns needed to satisfy triggers.
|
void |
test_058_collation()
Verify that the collation is what we expect.
|
void |
test_059_targetIndex()
Test that the left join can correctly read from an index on the target table and
pick up the row id.
|
void |
test_060_transitionTableSimpleColumn()
Test that the UPDATE actions of MERGE statements work with
trigger transition tables and simple column expressions from the transition tables.
|
void |
test_061_Derby6693() |
void |
test_062_Derby6550() |
static void |
truncateTriggerHistory()
Procedure to truncation the table which records trigger actions
|
static IntegerArrayVTI |
tworow_041()
Table function returning one row
|
private void |
vet_002(java.sql.Connection conn,
java.lang.String query,
int rowsAffected,
java.lang.String[][] expectedResults) |
private void |
vet_002(java.sql.Connection conn,
java.lang.String query,
int rowsAffected,
java.lang.String[][] expectedResults,
boolean useHashJoinStrategy) |
private void |
vet_003(java.sql.Connection conn,
java.lang.String query,
int rowsAffected,
java.lang.String[][] expectedT1Results,
java.lang.String[][] expectedT3Results) |
private void |
vet_003(java.sql.Connection conn,
java.lang.String query,
int rowsAffected,
java.lang.String[][] expectedT1Results,
java.lang.String[][] expectedT3Results,
boolean useHashJoinStrategy) |
private void |
vet_004(java.sql.Connection conn,
java.lang.String query,
int rowsAffected,
java.lang.String[][] expectedT1Results,
java.lang.String[][] expectedHistoryResults) |
private void |
vet_004(java.sql.Connection conn,
java.lang.String query,
int rowsAffected,
java.lang.String[][] expectedT1Results,
java.lang.String[][] expectedHistoryResults,
boolean useHashJoinStrategy) |
private void |
vet_005(java.sql.Connection conn,
java.lang.String query,
int rowsAffected,
java.lang.String[][] expectedT1Results,
java.lang.String[][] expectedHistoryResults) |
private void |
vet_005(java.sql.Connection conn,
java.lang.String query,
int rowsAffected,
java.lang.String[][] expectedT1Results,
java.lang.String[][] expectedHistoryResults,
boolean useHashJoinStrategy) |
private void |
vet_006(java.lang.String triggerDefinition,
java.lang.String[][] expectedT1Results) |
private void |
vet_006(java.lang.String triggerDefinition,
java.lang.String[][] expectedT1Results,
boolean useHashJoinStrategy) |
private void |
vet_006(java.lang.String triggerDefinition,
java.lang.String[][] expectedT1Results,
boolean useHashJoinStrategy,
boolean bounceDatabase) |
private void |
vet_012(java.lang.String triggerDefinition,
java.lang.String update,
java.lang.String[][] expectedResults) |
private void |
vet_012(java.lang.String triggerDefinition,
java.lang.String update,
java.lang.String[][] expectedResults,
boolean bounceDatabase) |
private void |
vet_018(java.lang.String triggerDefinition,
java.lang.String[][] expectedResults) |
private void |
vet_018(java.lang.String triggerDefinition,
java.lang.String[][] expectedResults,
boolean bounceDatabase) |
private void |
vet_019(java.sql.Connection conn,
java.lang.String mergeStatement) |
private void |
vet_035(java.sql.Connection conn,
java.lang.String query) |
private void |
vet_050(java.sql.Connection conn,
java.lang.String datatype,
boolean indexable,
java.lang.String initialTargetValues,
java.lang.String initialSourceValues,
java.lang.String mergeStatement,
java.lang.String[][] expectedResults) |
private void |
vet_050(java.sql.Connection conn,
java.lang.String datatype,
boolean indexable,
java.lang.String initialTargetValues,
java.lang.String initialSourceValues,
java.lang.String mergeStatement,
java.lang.String[][] expectedResults,
java.lang.String selectStatement) |
private void |
vet_050(java.sql.Connection conn,
java.lang.String initialTargetValues,
java.lang.String initialSourceValues,
java.lang.String mergeStatement,
java.lang.String[][] expectedResults,
java.lang.String selectStatement) |
private void |
vetPermission(Permission permission,
java.sql.Connection dboConnection,
java.sql.Connection ruthConnection,
java.lang.String mergeStatement)
Verify that the MERGE statement fails with the correct error after you revoke
a permission and that the MERGE statement succeeds after you add the permission back.
|
static int |
xmlX(java.lang.String doc)
Extract the contents of an html document as an integer
|
assertColumnTypes, assertDeterministic, expectExecutionWarning, expectExecutionWarnings, expectInsertRowError, expectNoWarning, expectUpdateRowError, fill, verifyRestrictedDrop, verifyRevokePrivilege
assertCallError, assertCheckTable, assertCommitError, assertCompileError, assertEquals, assertEquals, assertEquals, assertEquivalentDataType, assertErrorCode, assertGetIntError, assertNextError, assertPreparedStatementError, assertResults, assertResults, assertSQLExceptionEquals, assertSQLState, assertSQLState, assertStatementError, assertStatementError, assertStatementError, assertStatementError, assertStatementErrorUnordered, assertTableRowCount, assertUpdateCount, assertUpdateCount, assertWarning, chattyPrepare, chattyPrepareCall, checkAllConsistency, checkEstimatedRowCount, closeStatement, commit, createStatement, createStatement, createStatement, dropTable, dropTable, dropView, dropView, dumpRs, dumpRs, emptyStatementCache, executeQuery, expectCompilationError, expectCompilationError, expectExecutionError, getClientTransactionID, getConnection, getDatabaseProperty, getLastSQLException, goodStatement, goodUpdate, initializeConnection, openConnection, openDefaultConnection, openDefaultConnection, openDefaultConnection, openUserConnection, prepareCall, prepareCall, prepareCall, prepareStatement, prepareStatement, prepareStatement, prepareStatement, prepareStatement, prepareStatement, rollback, runBare, runBareOverridable, runScript, runScript, runSQLCommands, setAutoCommit, tearDown, usingDB2Client, usingDerbyNetClient, usingEmbedded
alarm, assertDirectoryDeleted, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertExecJavaCmdAsExpected, assertLaunchedJUnitTestMethod, assertLaunchedJUnitTestMethod, assertSameNullness, assertSecurityManager, assertThrowableEquals, currentDirectory, execJavaCmd, execJavaCmd, execJavaCmd, fail, getClassVersionMajor, getEmmaJar, getFailureFolder, getFilesWith, getJavaExecutableName, getSystemProperty, getTestConfiguration, getTestResource, hasInterruptibleIO, isCVM, isIBMJVM, isJ9Platform, isJava5, isJava7, isPhoneME, isPlatform, isSunJVM, isWindowsPlatform, newAssertionFailedError, openTestResource, println, printStackTrace, readProcessOutput, removeDirectory, removeDirectory, removeFiles, removeSystemProperty, runsWithEmma, runsWithJaCoCo, setSystemErr, setSystemOut, setSystemProperty, sleep, sleepAtLeastOneTick, traceit, vmAtLeast
assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, countTestCases, createResult, fail, fail, failNotEquals, failNotSame, failSame, format, getName, run, run, runTest, setName, toString
private static final java.lang.String TRACE_FILE_NAME
private static final java.lang.String TEST_DBO
private static final java.lang.String RUTH
private static final java.lang.String ALICE
private static final java.lang.String FRANK
private static final java.lang.String TONY
private static final java.lang.String[] LEGAL_USERS
private static final java.lang.String TARGET_MUST_BE_BASE
private static final java.lang.String SOURCE_MUST_BE_BASE_VIEW_OR_VTI
private static final java.lang.String SAME_EXPOSED_NAME
private static final java.lang.String DUPLICATE_COLUMNS
private static final java.lang.String COLUMN_NOT_IN_TABLE
private static final java.lang.String COLUMN_COUNT_MISMATCH
private static final java.lang.String DUPLICATE_SET_COLUMNS
private static final java.lang.String MISSING_TABLE
private static final java.lang.String NO_ROWS_AFFECTED
private static final java.lang.String NO_DML_IN_BEFORE_TRIGGERS
private static final java.lang.String NO_SUBQUERIES_IN_MATCHED_CLAUSE
private static final java.lang.String NO_SYNONYMS_IN_MERGE
private static final java.lang.String NO_DCL_IN_MERGE
private static final java.lang.String PARAMETER_NOT_SET
private static final java.lang.String CARDINALITY_VIOLATION
private static final java.lang.String NO_AGGREGATE_IN_MATCHING
private static final java.lang.String[] TRIGGER_HISTORY_COLUMNS
private static final java.lang.String BEGIN_HTML
private static final java.lang.String END_HTML
private static java.util.ArrayList<java.lang.String[]> _triggerHistory
public MergeStatementTest(java.lang.String name)
public java.lang.String expectedCollation()
public static junit.framework.Test suite()
private static junit.framework.Test standardDecoration(boolean withCollation)
protected void setUp() throws java.lang.Exception
setUp
in class junit.framework.TestCase
java.lang.Exception
public void test_001_badSyntax() throws java.lang.Exception
Test some bad syntax.
java.lang.Exception
public void test_002_deleteAction() throws java.lang.Exception
Test the delete action.
java.lang.Exception
private void vet_002(java.sql.Connection conn, java.lang.String query, int rowsAffected, java.lang.String[][] expectedResults) throws java.lang.Exception
java.lang.Exception
private void vet_002(java.sql.Connection conn, java.lang.String query, int rowsAffected, java.lang.String[][] expectedResults, boolean useHashJoinStrategy) throws java.lang.Exception
java.lang.Exception
private void populate_002(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
public void test_003_cascadingDeleteAction() throws java.lang.Exception
Test delete action involving subsequent cascaded deletes.
java.lang.Exception
private void vet_003(java.sql.Connection conn, java.lang.String query, int rowsAffected, java.lang.String[][] expectedT1Results, java.lang.String[][] expectedT3Results) throws java.lang.Exception
java.lang.Exception
private void vet_003(java.sql.Connection conn, java.lang.String query, int rowsAffected, java.lang.String[][] expectedT1Results, java.lang.String[][] expectedT3Results, boolean useHashJoinStrategy) throws java.lang.Exception
java.lang.Exception
private void populate_003(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
public void test_004_deleteActionStatementTriggers() throws java.lang.Exception
Test delete action involving before and after statement triggers.
java.lang.Exception
private void vet_004(java.sql.Connection conn, java.lang.String query, int rowsAffected, java.lang.String[][] expectedT1Results, java.lang.String[][] expectedHistoryResults) throws java.lang.Exception
java.lang.Exception
private void vet_004(java.sql.Connection conn, java.lang.String query, int rowsAffected, java.lang.String[][] expectedT1Results, java.lang.String[][] expectedHistoryResults, boolean useHashJoinStrategy) throws java.lang.Exception
java.lang.Exception
private void populate_004(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
public void test_005_deleteActionRowTriggers() throws java.lang.Exception
Test delete action involving before and after row triggers.
java.lang.Exception
private void vet_005(java.sql.Connection conn, java.lang.String query, int rowsAffected, java.lang.String[][] expectedT1Results, java.lang.String[][] expectedHistoryResults) throws java.lang.Exception
java.lang.Exception
private void vet_005(java.sql.Connection conn, java.lang.String query, int rowsAffected, java.lang.String[][] expectedT1Results, java.lang.String[][] expectedHistoryResults, boolean useHashJoinStrategy) throws java.lang.Exception
java.lang.Exception
private void populate_005(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
public void test_006_deleteWithTransitionTableSource() throws java.lang.Exception
Test delete action whose source table is a trigger transition table.
java.lang.Exception
private void vet_006(java.lang.String triggerDefinition, java.lang.String[][] expectedT1Results) throws java.lang.Exception
java.lang.Exception
private void vet_006(java.lang.String triggerDefinition, java.lang.String[][] expectedT1Results, boolean useHashJoinStrategy) throws java.lang.Exception
java.lang.Exception
private void vet_006(java.lang.String triggerDefinition, java.lang.String[][] expectedT1Results, boolean useHashJoinStrategy, boolean bounceDatabase) throws java.lang.Exception
java.lang.Exception
private java.sql.Connection bounceDatabase(java.lang.String newUser) throws java.lang.Exception
java.lang.Exception
private void populate_006(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
public void test_007_insertGeneratedColumnsAndDefaults() throws java.lang.Exception
Test insert action with generated columns and defaults.
java.lang.Exception
public void test_008_insertAndCheckConstraint() throws java.lang.Exception
Test insert action with a check constraint.
java.lang.Exception
public void test_009_insertAndUniqueForeignConstraint() throws java.lang.Exception
Test insert action with a unique and foreign key constraints.
java.lang.Exception
public void test_010_insertStatementTriggers() throws java.lang.Exception
Test insert action with before and after statement level triggers.
java.lang.Exception
public void test_011_insertRowTriggers() throws java.lang.Exception
Test insert action with before and after row level triggers.
java.lang.Exception
public void test_012_insertWithTransitionTableSource() throws java.lang.Exception
Test insert action whose source table is a trigger transition table.
java.lang.Exception
private void vet_012(java.lang.String triggerDefinition, java.lang.String update, java.lang.String[][] expectedResults) throws java.lang.Exception
java.lang.Exception
private void vet_012(java.lang.String triggerDefinition, java.lang.String update, java.lang.String[][] expectedResults, boolean bounceDatabase) throws java.lang.Exception
java.lang.Exception
private void populate_012(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
public void test_013_insertAndDelete() throws java.lang.Exception
Test combined insert and delete actions.
java.lang.Exception
public void test_014_basicUpdate() throws java.lang.Exception
Test basic update action.
java.lang.Exception
public void atest_015_bug_6414() throws java.lang.Exception
Verify that the UPDATE actions of MERGE statements behave like ordinary UPDATE statements in their treatment of DEFAULT values for identity columns. Derby's behavior here is wrong but we would like it to be consistent. We need to correct the MERGE behavior when we correct the behavior for standalone UPDATE statements.
java.lang.Exception
public void test_016_updateWithStatementTriggers() throws java.lang.Exception
Test before and after statement level triggers fired by MERGE statements.
java.lang.Exception
public void test_017_updateWithRowTriggers() throws java.lang.Exception
Test before and after row level triggers fired by MERGE statements.
java.lang.Exception
public void test_018_updateFromTriggerTransitionTables() throws java.lang.Exception
Test MERGE statements with UPDATE actions whose source tables are trigger transition tables.
java.lang.Exception
private void vet_018(java.lang.String triggerDefinition, java.lang.String[][] expectedResults) throws java.lang.Exception
java.lang.Exception
private void vet_018(java.lang.String triggerDefinition, java.lang.String[][] expectedResults, boolean bounceDatabase) throws java.lang.Exception
java.lang.Exception
private void populate_018(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
public void test_019_insertUpdateDelete() throws java.lang.Exception
Test combined insert, update, delete actions.
java.lang.Exception
private void vet_019(java.sql.Connection conn, java.lang.String mergeStatement) throws java.lang.Exception
java.lang.Exception
private void populate_019(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
public void test_020_updateWithCheckConstraint() throws java.lang.Exception
Test check constraints fired by UPDATE actions.
java.lang.Exception
public void test_021_updateWithForeignAndCheckConstraint() throws java.lang.Exception
Test foreign key constraints with check constraints fired by UPDATE actions. The CHECK constraint is satisfied but the foreign key is not.
java.lang.Exception
public void test_022_updateWithForeignPrimaryAndCheckConstraint() throws java.lang.Exception
Test primary key constraints with check constraints fired by UPDATE actions. The CHECK constraint is satisfied but the foreign key is not.
java.lang.Exception
public void test_023_correlationNames() throws java.lang.Exception
Test correlation names in MERGE statements.
java.lang.Exception
private void populate_023(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
private void populate_023_2(java.sql.Connection conn) throws java.lang.Exception
java.lang.Exception
public void test_024_mergeNotAllowedInBeforeTriggers() throws java.lang.Exception
Verify that BEFORE triggers can't fire MERGE statements.
java.lang.Exception
public void test_025_noInsertList() throws java.lang.Exception
Verify that the INSERT list can be omitted.
java.lang.Exception
public void test_026_otherTableTypes() throws java.lang.Exception
Verify that MERGE works with system tables and global temporary tables.
java.lang.Exception
public void test_027_correlationNamesInSetClauses() throws java.lang.Exception
Verify that correlation names on the left side of SET clauses are replaced properly.
java.lang.Exception
public void test_028_basicRowTrigger() throws java.lang.Exception
Verify that you can drive MERGE statements from row-based triggers.
java.lang.Exception
public void test_029_scanViaIndex() throws java.lang.Exception
This case tests a problem query which causes an index scan to be selected for the target table. Row locations weren't being treated as columns in the result row and conglomerate info was not being propagated to copied ResultColumnLists.
java.lang.Exception
public void test_030_SQLRef_serialization() throws java.lang.Exception
Verify the fix to a query which broke the serialization of row locations.
java.lang.Exception
public void test_032_noSubqueriesInMatchedClauses() throws java.lang.Exception
For the time being, forbid subqueries in WHEN [ NOT ] MATCHED clauses.
java.lang.Exception
public void test_033_identicalNames() throws java.lang.Exception
Correctly resolve column references using a source and target whose table and column names are identical but which live in different schemas.
java.lang.Exception
public void test_034_noSynonyms() throws java.lang.Exception
Synonyms not allowed as source or target tables in MERGE statements.
java.lang.Exception
public void test_035_leftSideOfSet() throws java.lang.Exception
Verify that table identifiers can be used or omitted on the left side of SET clauses.
java.lang.Exception
private void vet_035(java.sql.Connection conn, java.lang.String query) throws java.lang.Exception
java.lang.Exception
public void test_036_derivedColumnLists() throws java.lang.Exception
Don't allow derived column lists in MERGE statements..
java.lang.Exception
public void test_037_parameters() throws java.lang.Exception
Verify that you can use ? parameters in MERGE statements.
java.lang.Exception
public void test_038_parameters() throws java.lang.Exception
Verify that you can use ? parameters in all search conditions as well as in INSERT values and on the left side of SET operators.
java.lang.Exception
public void test_039_indexProbe() throws java.lang.Exception
Verify correct behavior when the target table is read via index probing.
java.lang.Exception
public void test_040_valuesView() throws java.lang.Exception
Verify correct behavior when source table is a values clause wrapped in a view.
java.lang.Exception
public void test_041_cardinalityViolations() throws java.lang.Exception
Verify the same target row can't be touched twice by a MERGE statement.
java.lang.Exception
public void test_042_missingSchema() throws java.lang.Exception
Verify that we don't unnecessarily raise missing schema errors.
java.lang.Exception
public void test_043_correlationNamesAddedColumns() throws java.lang.Exception
Verify correlation names with columns added in order to support triggers.
java.lang.Exception
public void test_044_deletePrivileges() throws java.lang.Exception
Verify privileges needed for DELETE actions.
java.lang.Exception
private void vetPermission(Permission permission, java.sql.Connection dboConnection, java.sql.Connection ruthConnection, java.lang.String mergeStatement) throws java.lang.Exception
java.lang.Exception
private void grantPermission(java.sql.Connection conn, java.lang.String permission) throws java.lang.Exception
java.lang.Exception
private void revokePermission(java.sql.Connection conn, java.lang.String permission) throws java.lang.Exception
java.lang.Exception
public void test_045_insertPrivileges() throws java.lang.Exception
Verify privileges needed for INSERT actions.
java.lang.Exception
public void test_046_udtCasts() throws java.lang.Exception
Verify UDT privileges for CASTs in INSERT and DELETE actions.
java.lang.Exception
public void test_047_updatePrivileges() throws java.lang.Exception
Verify privileges needed for UPDATE actions.
java.lang.Exception
public void test_048_updateUdtCasts() throws java.lang.Exception
Verify privileges needed for CASTs involving UPDATE actions.
java.lang.Exception
public void test_049_allPrivileges() throws java.lang.Exception
Verify privileges needed for all actions.
java.lang.Exception
public void test_050_allDatatypes() throws java.lang.Exception
Test all datatypes in ON clauses, matching restrictions, and as INSERT/UPDATE values.
java.lang.Exception
private void vet_050(java.sql.Connection conn, java.lang.String datatype, boolean indexable, java.lang.String initialTargetValues, java.lang.String initialSourceValues, java.lang.String mergeStatement, java.lang.String[][] expectedResults) throws java.lang.Exception
java.lang.Exception
private void vet_050(java.sql.Connection conn, java.lang.String datatype, boolean indexable, java.lang.String initialTargetValues, java.lang.String initialSourceValues, java.lang.String mergeStatement, java.lang.String[][] expectedResults, java.lang.String selectStatement) throws java.lang.Exception
java.lang.Exception
private void vet_050(java.sql.Connection conn, java.lang.String initialTargetValues, java.lang.String initialSourceValues, java.lang.String mergeStatement, java.lang.String[][] expectedResults, java.lang.String selectStatement) throws java.lang.Exception
java.lang.Exception
private void populate_050(java.sql.Connection conn, java.lang.String initialTargetValues, java.lang.String initialSourceValues) throws java.lang.Exception
java.lang.Exception
public void test_051_multiBlob() throws java.lang.Exception
Test multiple references to blob columns.
java.lang.Exception
public void test_052_multiClob() throws java.lang.Exception
Test multiple references to clob columns.
java.lang.Exception
public void test_053_nullGeneratedColumns() throws java.lang.Exception
Test MERGE statements involving generated columns which evaluate to null.
java.lang.Exception
public void test_054_triggersOnGeneratedColumns() throws java.lang.Exception
Test MERGE statements involving triggers on generated columns.
java.lang.Exception
public void test_055_triggersMultiBlob() throws java.lang.Exception
Test MERGE statements which read BLOBs multiple times when running triggers.
java.lang.Exception
public void test_056_triggersMultiClob() throws java.lang.Exception
Test MERGE statements which read CLOBs multiple times when running triggers.
java.lang.Exception
public void test_057_deferredDelete() throws java.lang.Exception
Test that deferred deletes buffer up the columns needed to satisfy triggers.
java.lang.Exception
public void test_058_collation() throws java.lang.Exception
Verify that the collation is what we expect.
java.lang.Exception
public void test_059_targetIndex() throws java.lang.Exception
Test that the left join can correctly read from an index on the target table and pick up the row id.
java.lang.Exception
public void test_060_transitionTableSimpleColumn() throws java.lang.Exception
Test that the UPDATE actions of MERGE statements work with trigger transition tables and simple column expressions from the transition tables.
java.lang.Exception
public void test_061_Derby6693() throws java.sql.SQLException
java.sql.SQLException
public void test_062_Derby6550() throws java.sql.SQLException
java.sql.SQLException
public static int illegalFunction() throws java.lang.Exception
java.lang.Exception
public static void truncateTriggerHistory()
public static java.sql.ResultSet history()
public static IntegerArrayVTI integerList_023()
public static IntegerArrayVTI singlerow_028()
public static IntegerArrayVTI tworow_041()
public static void countRows(java.lang.String candidateName, java.lang.String actionString) throws java.sql.SQLException
Trigger-called procedure for counting rows in a candidate table and then inserting the result in a history table. The history table has the following shape:
java.sql.SQLException
public static void sumColumn(java.lang.String candidateName, java.lang.String columnName, java.lang.String actionString) throws java.sql.SQLException
Trigger-called procedure for summing a column in a candidate table and then inserting the result in a history table. The history table has the following shape:
java.sql.SQLException
public static void addHistoryRow(java.lang.String actionString, java.lang.Integer actionValue)
public static void addHistoryRow(java.lang.String actionString, java.lang.String actionValue)
public static boolean equals(java.lang.String left, java.lang.String right)
public static boolean equals(java.sql.Clob left, java.sql.Clob right) throws java.sql.SQLException
java.sql.SQLException
public static boolean equals(java.sql.Blob left, java.sql.Blob right) throws java.sql.SQLException
java.sql.SQLException
public static byte[] reverse(byte[] input)
public static java.lang.String reverse(java.lang.String inputString)
public static java.sql.Blob reverse(java.sql.Blob inputBlob) throws java.sql.SQLException
java.sql.SQLException
public static java.sql.Clob reverse(java.sql.Clob inputClob) throws java.sql.SQLException
java.sql.SQLException
public static byte[] add(byte[] left, byte[] right)
public static java.sql.Blob add(java.sql.Blob left, java.sql.Blob right) throws java.sql.SQLException
java.sql.SQLException
public static java.sql.Clob add(java.sql.Clob left, java.sql.Clob right) throws java.sql.SQLException
java.sql.SQLException
public static byte[] makeByteArray(java.lang.Integer... inputs)
public static java.sql.Blob makeBlob(int... inputs)
public static java.sql.Blob makeBlob(int repeatCount, int... inputs)
public static java.sql.Clob makeClob(int repeatCount, java.lang.String... inputs)
public static int getCell(java.sql.Blob blob, long idx) throws java.lang.Exception
java.lang.Exception
public static java.lang.String getCell(java.sql.Clob clob, long idx) throws java.lang.Exception
java.lang.Exception
public static java.lang.Integer nop(java.lang.Integer value)
public static int xmlX(java.lang.String doc) throws java.lang.Exception
java.lang.Exception
public static java.sql.Connection getNestedConnection() throws java.sql.SQLException
java.sql.SQLException
private java.lang.String makeHashJoinMerge(java.lang.String original)
Convert a MERGE statement which uses a nested join strategy into an equivalent MERGE statement which uses a hash join strategy. To do this, we replace the ON clause with an equivalent ON clause which joins on key columns instead of expressions.
The original query is a MERGE statement whose ON clauses joins complex expressions, making the optimizer choose a nested-loop strategy. This method transforms the MERGE statement into one whose ON clause joins simple keys. This will make the optimizer choose a hash-join strategy.
private void enableSQLAuthorization() throws java.lang.Exception
java.lang.Exception
Apache Derby V10.13 Internals - Copyright © 2004,2016 The Apache Software Foundation. All Rights Reserved.