package net.sourceforge.mayfly.acceptance; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class H2Dialect extends Dialect { @Override public Connection openConnection() throws Exception { Class.forName("org.h2.Driver"); return openAdditionalConnection(); } @Override public Connection openAdditionalConnection() throws SQLException { return DriverManager.getConnection("jdbc:h2:mem:SqlTestCase"); } @Override public void shutdown(Connection connection) throws Exception { SqlTestCase.execute("SHUTDOWN", connection); // So next test gets a new database. } @Override public Class typeOfTinyint() { return Byte.class; } @Override public Class typeOfSmallint() { return Short.class; } @Override public boolean expressionsAreTypeLong() { return false; } @Override public boolean canMixStringAndInteger() { return true; } @Override public boolean canSetStringOnDecimalColumn() { return true; } @Override public boolean trailingSpacesConsultedInComparisons() { return true; } @Override public boolean fromIsOptional() { return true; } @Override public boolean quotedIdentifiersAreCaseSensitive() { return true; } @Override public boolean callJavaMethodAsStoredProcedure() { return false; } @Override public boolean haveCreateAlias() { return true; } @Override public boolean complainAboutStoredProcedureOverloadingOnArgumentTypeOrCount() { return false; } @Override public boolean canDropPrimaryKeyColumn() { return false; } @Override public boolean canDropColumnWithForeignKey() { return false; } @Override public boolean defaultValueCanBeExpression() { return true; } @Override public boolean haveDropIndexOn() { return false; } @Override public boolean allowTimestampInDateColumn() { return true; } @Override public boolean allowDuplicateTableWithDifferingColumnNames() { return true; } @Override public boolean innerJoinRequiresOn() { return false; } @Override public boolean onIsRestrictedToJoinsTables() { return false; } @Override public boolean considerTablesMentionedAfterJoin() { return true; } @Override public boolean canDropTargetOfForeignKey() { return true; } @Override public boolean foreignKeyMustReferToPrimaryKeyOrUnique() { return false; } @Override public boolean foreignKeyJustNeedsIndex() { return true; } @Override public boolean autoCommitMustBeOffToCallRollback() { return false; } @Override public boolean willWaitForWriterToCommit() { /* Although H2 does have a fairly short timeout, and we could look for the timeout exception, it seems better to not slow down the tests with timeouts. */ return true; } @Override public boolean willWaitForWriterToCommitOnTwoRowInserts() { return true; } @Override public boolean authorizationAllowedInCreateSchema() { /* Actually, H2 allows the syntax, but it seems to expect the user to exist. */ return false; } @Override public boolean canCreateSchemaAndTablesInSameStatement() { return false; } @Override public boolean canOrderByExpression(boolean isAggregate) { return true; } @Override public boolean detectsAmbiguousColumnsInOrderBy() { return false; } @Override public boolean metaDataExpectsUppercase() { return true; } @Override public String productName() { return "H2"; } @Override public boolean disallowNullOnRightHandSideOfIn() { return false; } @Override public boolean notRequiresBoolean() { return false; } @Override public boolean whereCanReferToColumnAlias() { return false; } @Override public boolean canGetValueViaExpressionName() { return true; } @Override public boolean maySpecifyTableDotColumnToJdbc() { return true; } @Override public boolean canHaveLimitWithoutOrderBy() { return true; } @Override public boolean haveDropForeignKey() { return false; } @Override public boolean haveModifyColumn() { return false; } @Override public boolean haveConcatBuiltIn() { return true; } @Override public boolean disallowNullsInExpressions() { return false; } @Override public boolean haveAutoUnderbarIncrement() { return true; } @Override public boolean haveAutoIncrementSerial() { return true; } @Override public boolean haveIdentity() { return true; } @Override public boolean haveSql2003AutoIncrement() { return true; } @Override public boolean sql2003RelativeToLastValue() { return true; } @Override public boolean allowOrderByOnDelete() { return false; } @Override public boolean canGroupByColumnAlias() { return false; } @Override public boolean groupByExpressionSimpleComparator() { return true; } @Override public boolean errorIfNotAggregateOrGrouped(boolean rowsPresent) { if (rowsPresent) { return true; } else { return false; } } @Override public boolean disallowHavingOnUnaggregated() { return false; } @Override public boolean allowExplicitAllInAggregate() { return false; } @Override public boolean canTurnNullableColumnIntoPrimaryKey() { return false; } }