protected <T> T convert(Object value, Class<T> binding) { if (value == null) { return (T) value; } // convert the value if necessary if (!binding.isInstance(value)) { Object converted = Converters.convert(value, binding); if (converted != null) { value = converted; } else { dataStore .getLogger() .warning("Unable to convert " + value + " to " + binding.getName()); } } return (T) value; }
public void setTransaction(Transaction tx) { if (tx != null && this.tx != null) { throw new IllegalStateException( "New transaction set without " + "closing old transaction first."); } if (tx == null) { if (cx != null) { if (!external) { dataStore.closeSafe(cx); } } else { dataStore .getLogger() .warning( "Transaction is attempting to " + "close an already closed connection"); } cx = null; } this.tx = tx; }
@Override public Object getLastAutoGeneratedValue( String schemaName, String tableName, String columnName, Connection cx) throws SQLException { Statement st = cx.createStatement(); try { String sql = "SELECT last_insert_id()"; dataStore.getLogger().fine(sql); ResultSet rs = st.executeQuery(sql); try { if (rs.next()) { return rs.getLong(1); } } finally { dataStore.closeSafe(rs); } } finally { dataStore.closeSafe(st); } return null; }
@Override public String getSequenceForColumn( String schemaName, String tableName, String columnName, Connection cx) throws SQLException { String sequenceName = tableName + "_" + columnName + "_SEQUENCE"; // sequence names have to be upper case to select values from them sequenceName = sequenceName.toUpperCase(); Statement st = cx.createStatement(); try { StringBuffer sql = new StringBuffer(); sql.append("SELECT * FROM INFORMATION_SCHEMA.SEQUENCES "); sql.append("WHERE SEQUENCE_NAME = '").append(sequenceName).append("'"); dataStore.getLogger().fine(sql.toString()); ResultSet rs = st.executeQuery(sql.toString()); try { if (rs.next()) { return sequenceName; } } finally { dataStore.closeSafe(rs); } } finally { dataStore.closeSafe(st); } return null; }
@Override public String getSequenceForColumn( String schemaName, String tableName, String columnName, Connection cx) throws SQLException { Statement st = cx.createStatement(); try { // pg_get_serial_sequence oddity: table name needs to be // escaped with "", whilst column name, doesn't... String sql = "SELECT pg_get_serial_sequence('\""; if (schemaName != null && !"".equals(schemaName)) sql += schemaName + "\".\""; sql += tableName + "\"', '" + columnName + "')"; dataStore.getLogger().fine(sql); ResultSet rs = st.executeQuery(sql); try { if (rs.next()) { return rs.getString(1); } } finally { dataStore.closeSafe(rs); } } finally { dataStore.closeSafe(st); } return null; }
@Override public Object getNextSequenceValue(String schemaName, String sequenceName, Connection cx) throws SQLException { Statement st = cx.createStatement(); try { String sql = "SELECT " + encodeNextSequenceValue(schemaName, sequenceName); dataStore.getLogger().fine(sql); ResultSet rs = st.executeQuery(sql); try { if (rs.next()) { return rs.getLong(1); } } finally { dataStore.closeSafe(rs); } } finally { dataStore.closeSafe(st); } return null; }
@Override public Object getNextSequenceValue(String schemaName, String sequenceName, Connection cx) throws SQLException { Statement st = cx.createStatement(); try { String sql = "SELECT " + encodeNextSequenceValue(schemaName, sequenceName); dataStore.getLogger().fine(sql); ResultSet rs = st.executeQuery(sql); try { if (!rs.next()) { throw new SQLException("Could not find a next value for sequence"); } return rs.getInt(1); } finally { dataStore.closeSafe(rs); } } finally { dataStore.closeSafe(st); } }
@Override public Object getLastAutoGeneratedValue( String schemaName, String tableName, String columnName, Connection cx) throws SQLException { Statement st = cx.createStatement(); try { // Retrieve the sequence of the column String sequenceName = getSequenceForColumn(schemaName, tableName, columnName, cx); if (sequenceName == null) { // There is no sequence to get the value from return null; } String sql = "SELECT currval('" + sequenceName + "')"; dataStore.getLogger().fine(sql); ResultSet rs = st.executeQuery(sql); try { if (rs.next()) { return rs.getLong(1); } } finally { dataStore.closeSafe(rs); } } finally { dataStore.closeSafe(st); } return null; }
sql.append(" IS NOT NULL"); dataStore.getLogger().fine(sql.toString());
sql.append(" IS NOT NULL"); dataStore.getLogger().fine(sql.toString());
sql.append(" is not null LIMIT 1"); dataStore.getLogger().fine(sql.toString()); Statement st = cx.createStatement();
@After public void tearDown() { dataStore.getLogger().removeHandler(mockLogHandler); dataStore.dispose(); }
/** Setup a log handler counting {@link LogRecord} having {@link Level#WARNING}. */ @Before public void setUp() { // when(mockLogHandler.publish(any(LogRecord.class))); doAnswer( new Answer<Object>() { public Object answer(InvocationOnMock invocation) { Object[] arguments = invocation.getArguments(); LogRecord logRecord = (LogRecord) arguments[0]; if (logRecord.getLevel() == Level.WARNING && !logRecord.getSourceMethodName().equals("finalize")) { warningsCount++; } return null; } }) .when(mockLogHandler) .publish(any(LogRecord.class)); dataStore = new JDBCDataStore(); dataStore.getLogger().addHandler(mockLogHandler); }
@Override protected JDBCDataStore createDataStoreInternal(JDBCDataStore dataStore, Map params) throws IOException { String storageEngine = (String) STORAGE_ENGINE.lookUp(params); if (storageEngine == null) { storageEngine = (String) STORAGE_ENGINE.sample; } Boolean enhancedSpatialFlag = (Boolean) ENHANCED_SPATIAL_SUPPORT.lookUp(params); if (enhancedSpatialFlag == null) { // enhanced spatial support should be enabled if MySQL // version is at least 5.6. enhancedSpatialSupport = isMySqlVersion56(dataStore); } else if (enhancedSpatialFlag && !isMySqlVersion56(dataStore)) { dataStore .getLogger() .info("MySQL version does not support enhancedSpatialSupport. Disabling it"); enhancedSpatialSupport = false; } SQLDialect dialect = dataStore.getSQLDialect(); if (dialect instanceof MySQLDialectBasic) { ((MySQLDialectBasic) dialect).setStorageEngine(storageEngine); ((MySQLDialectBasic) dialect).setUsePreciseSpatialOps(enhancedSpatialSupport); } else { ((MySQLDialectPrepared) dialect).setStorageEngine(storageEngine); ((MySQLDialectPrepared) dialect).setUsePreciseSpatialOps(enhancedSpatialSupport); } return dataStore; }
getDataStore().getLogger().fine(sql); reader = new JDBCFeatureReader(sql, cx, this, fullSchema, query);
try { getDataStore().getLogger().fine("Calculating size manually");
&& !canOffset())) { getDataStore().getLogger().fine("Calculating bounds manually");