/* * HA-JDBC: High-Availability JDBC * Copyright (C) 2012 Paul Ferraro * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.hajdbc.dialect; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.Arrays; import net.sf.hajdbc.ForeignKeyConstraint; import net.sf.hajdbc.QualifiedName; import net.sf.hajdbc.TableProperties; import net.sf.hajdbc.dialect.sybase.SybaseDialectFactory; import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** * @author Paul Ferraro */ public class SybaseDialectTest extends StandardDialectTest { public SybaseDialectTest() { super(new SybaseDialectFactory()); } /** * {@inheritDoc} * @see net.sf.hajdbc.dialect.StandardDialectTest#getIdentityColumnSupport() */ @Override public void getIdentityColumnSupport() { assertSame(this.dialect, this.dialect.getIdentityColumnSupport()); } /** * {@inheritDoc} * @see net.sf.hajdbc.dialect.StandardDialectTest#getTruncateTableSQL() */ @Override public void getTruncateTableSQL() throws SQLException { TableProperties table = mock(TableProperties.class); QualifiedName name = mock(QualifiedName.class); when(table.getName()).thenReturn(name); when(name.getDMLName()).thenReturn("table"); String result = this.dialect.getTruncateTableSQL(table); assertEquals("TRUNCATE TABLE table", result); } /** * {@inheritDoc} * @see net.sf.hajdbc.dialect.StandardDialectTest#getCreateForeignKeyConstraintSQL() */ @Override public void getCreateForeignKeyConstraintSQL() throws SQLException { QualifiedName table = mock(QualifiedName.class); QualifiedName foreignTable = mock(QualifiedName.class); ForeignKeyConstraint constraint = mock(ForeignKeyConstraint.class); when(table.getDDLName()).thenReturn("table"); when(foreignTable.getDDLName()).thenReturn("foreign_table"); when(constraint.getName()).thenReturn("name"); when(constraint.getTable()).thenReturn(table); when(constraint.getColumnList()).thenReturn(Arrays.asList("column1", "column2")); when(constraint.getForeignTable()).thenReturn(foreignTable); when(constraint.getForeignColumnList()).thenReturn(Arrays.asList("foreign_column1", "foreign_column2")); when(constraint.getDeferrability()).thenReturn(DatabaseMetaData.importedKeyInitiallyDeferred); when(constraint.getDeleteRule()).thenReturn(DatabaseMetaData.importedKeyCascade); when(constraint.getUpdateRule()).thenReturn(DatabaseMetaData.importedKeyRestrict); String result = this.dialect.getCreateForeignKeyConstraintSQL(constraint); assertEquals("ALTER TABLE table ADD CONSTRAINT name FOREIGN KEY (column1, column2) REFERENCES foreign_table (foreign_column1, foreign_column2) ON DELETE CASCADE ON UPDATE RESTRICT", result); } /** * {@inheritDoc} * @see net.sf.hajdbc.dialect.StandardDialectTest#evaluateCurrentDate() */ @Override public void evaluateCurrentDate() { java.sql.Date date = new java.sql.Date(System.currentTimeMillis()); assertEquals(String.format("SELECT '%s' FROM test", date.toString()), this.dialect.evaluateCurrentDate("SELECT CURRENT DATE FROM test", date)); assertEquals(String.format("SELECT '%s' FROM test", date.toString()), this.dialect.evaluateCurrentDate("SELECT TODAY(*) FROM test", date)); assertEquals(String.format("SELECT '%s' FROM test", date.toString()), this.dialect.evaluateCurrentDate("SELECT TODAY ( * ) FROM test", date)); assertEquals("SELECT CURRENT_DATE FROM test", this.dialect.evaluateCurrentDate("SELECT CURRENT_DATE FROM test", date)); assertEquals("SELECT CURRENT DATES FROM test", this.dialect.evaluateCurrentDate("SELECT CURRENT DATES FROM test", date)); assertEquals("SELECT SCURRENT DATE FROM test", this.dialect.evaluateCurrentDate("SELECT SCURRENT DATE FROM test", date)); assertEquals("SELECT CURRENT_TIME FROM test", this.dialect.evaluateCurrentDate("SELECT CURRENT_TIME FROM test", date)); assertEquals("SELECT CURRENT_TIMESTAMP FROM test", this.dialect.evaluateCurrentDate("SELECT CURRENT_TIMESTAMP FROM test", date)); } /** * {@inheritDoc} * @see net.sf.hajdbc.dialect.StandardDialectTest#evaluateCurrentTime() */ @Override public void evaluateCurrentTime() { java.sql.Time time = new java.sql.Time(System.currentTimeMillis()); assertEquals(String.format("SELECT '%s' FROM test", time.toString()), this.dialect.evaluateCurrentTime("SELECT CURRENT TIME FROM test", time)); assertEquals("SELECT CURRENT_TIME FROM test", this.dialect.evaluateCurrentTime("SELECT CURRENT_TIME FROM test", time)); assertEquals("SELECT LOCALTIME FROM test", this.dialect.evaluateCurrentTime("SELECT LOCALTIME FROM test", time)); assertEquals("SELECT CURRENT_DATE FROM test", this.dialect.evaluateCurrentTime("SELECT CURRENT_DATE FROM test", time)); assertEquals("SELECT CURRENT_TIMESTAMP FROM test", this.dialect.evaluateCurrentTime("SELECT CURRENT_TIMESTAMP FROM test", time)); assertEquals("SELECT LOCALTIMESTAMP FROM test", this.dialect.evaluateCurrentTime("SELECT LOCALTIMESTAMP FROM test", time)); } /** * {@inheritDoc} * @see net.sf.hajdbc.dialect.StandardDialectTest#evaluateCurrentTimestamp() */ @Override public void evaluateCurrentTimestamp() { java.sql.Timestamp timestamp = new java.sql.Timestamp(System.currentTimeMillis()); assertEquals(String.format("SELECT '%s' FROM test", timestamp.toString()), this.dialect.evaluateCurrentTimestamp("SELECT CURRENT TIMESTAMP FROM test", timestamp)); assertEquals(String.format("SELECT '%s' FROM test", timestamp.toString()), this.dialect.evaluateCurrentTimestamp("SELECT GETDATE() FROM test", timestamp)); assertEquals(String.format("SELECT '%s' FROM test", timestamp.toString()), this.dialect.evaluateCurrentTimestamp("SELECT GETDATE ( ) FROM test", timestamp)); assertEquals(String.format("SELECT '%s' FROM test", timestamp.toString()), this.dialect.evaluateCurrentTimestamp("SELECT NOW(*) FROM test", timestamp)); assertEquals(String.format("SELECT '%s' FROM test", timestamp.toString()), this.dialect.evaluateCurrentTimestamp("SELECT NOW ( * ) FROM test", timestamp)); assertEquals("SELECT CURRENT_TIMESTAMP FROM test", this.dialect.evaluateCurrentTimestamp("SELECT CURRENT_TIMESTAMP FROM test", timestamp)); assertEquals("SELECT LOCALTIMESTAMP FROM test", this.dialect.evaluateCurrentTimestamp("SELECT LOCALTIMESTAMP FROM test", timestamp)); assertEquals("SELECT CURRENT_DATE FROM test", this.dialect.evaluateCurrentTimestamp("SELECT CURRENT_DATE FROM test", timestamp)); assertEquals("SELECT CURRENT_TIME FROM test", this.dialect.evaluateCurrentTimestamp("SELECT CURRENT_TIME FROM test", timestamp)); assertEquals("SELECT LOCALTIME FROM test", this.dialect.evaluateCurrentTimestamp("SELECT LOCALTIME FROM test", timestamp)); } @Override public void isValid() throws SQLException { Connection connection = mock(Connection.class); Statement statement = mock(Statement.class); when(connection.createStatement()).thenReturn(statement); when(statement.executeQuery("SELECT GETDATE()")).thenReturn(null); boolean result = this.dialect.isValid(connection); assertTrue(result); } }