org.jumpmind.symmetric.db.IDbDialect Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of symmetric-ds Show documentation
Show all versions of symmetric-ds Show documentation
SymmetricDS is an open source database synchronization solution. It is platform-independent,
web-enabled, and database-agnostic. SymmetricDS was first built to replicate changes between 'retail store'
databases and ad centralized 'corporate' database.
The newest version!
/*
* Licensed to JumpMind Inc under one or more contributor
* license agreements. See the NOTICE file distributed
* with this work for additional information regarding
* copyright ownership. JumpMind Inc licenses this file
* to you under the GNU Lesser General Public License (the
* "License"); you may not use this file except in compliance
* with the License.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see
* .
*
* 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.jumpmind.symmetric.db;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import org.jumpmind.symmetric.common.ParameterConstants;
import org.jumpmind.symmetric.ddl.Platform;
import org.jumpmind.symmetric.ddl.model.Column;
import org.jumpmind.symmetric.ddl.model.Database;
import org.jumpmind.symmetric.ddl.model.Table;
import org.jumpmind.symmetric.load.IColumnFilter;
import org.jumpmind.symmetric.model.Channel;
import org.jumpmind.symmetric.model.DataEventType;
import org.jumpmind.symmetric.model.Node;
import org.jumpmind.symmetric.model.Trigger;
import org.jumpmind.symmetric.model.TriggerHistory;
import org.jumpmind.symmetric.model.TriggerRouter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.jdbc.support.lob.LobHandler;
/**
*
*/
public interface IDbDialect {
public void createTrigger(StringBuilder sqlBuffer, DataEventType dml, Trigger trigger, TriggerHistory hist,
String tablePrefix, Table table);
/**
* Get the name of this symmetric instance. This can be set in
* symmetric.properties using the symmetric.runtime.engine.name property.
*/
public String getEngineName();
public void removeTrigger(StringBuilder sqlBuffer, String catalogName, String schemaName, String triggerName,
String tableName, TriggerHistory oldHistory);
public boolean doesTriggerExist(String catalogName, String schema, String tableName, String triggerName);
/**
* This is called by the data loader each time the table context changes,
* giving the dialect an opportunity to do any pre loading work. Only one
* table is active at any one point.
*/
public void prepareTableForDataLoad(Table table);
/**
* This is called by the data loader each time the table context changes
* away from a table or when the the data loader is closed, giving the
* dialect an opportunity to do any post loading work for the given table.
*/
public void cleanupAfterDataLoad(Table table);
public Database readPlatformDatabase(boolean includeSymmetricTables);
/**
* For performance reasons, the as table metadata is read in, it is cached.
* This method will clear that cache.
*/
public void resetCachedTableModel();
/**
* Check to see if the database is configured for symmetric already, or if
* it needs configured.
*
* @return true if configuration tables need to be created.
*/
public boolean doesDatabaseNeedConfigured();
public void initTablesAndFunctions();
public Platform getPlatform();
public String getName();
public String getVersion();
public int getMajorVersion();
public int getMinorVersion();
public String getProductVersion();
public BinaryEncoding getBinaryEncoding();
public Table getTable(String catalogName, String schemaName, final String tableName, boolean useCache);
public Table getTable(Trigger trigger, boolean useCache);
public String getTransactionTriggerExpression(String defaultCatalog, String defaultSchema, Trigger trigger);
public String createInitialLoadSqlFor(Node node, TriggerRouter trigger, Table table, TriggerHistory triggerHistory);
public String createPurgeSqlFor(Node node, TriggerRouter triggerRouter);
public String createCsvDataSql(Trigger trig, String whereClause);
public String createCsvPrimaryKeySql(Trigger trig, String whereClause);
/**
* @return true if blank characters are padded out
*/
public boolean isBlankCharColumnSpacePadded();
/**
* @return true if non-blank characters are padded out
*/
public boolean isNonBlankCharColumnSpacePadded();
public boolean isCharColumnSpaceTrimmed();
public boolean isEmptyStringNulled();
/**
* Get the maximum size the name of a trigger can be for the database
* platform. If the generated symmetric trigger name is greater than the max
* trigger name, symmetric will truncate the name, then log a warning
* suggesting that you might want to provide your own name.
*/
public int getMaxTriggerNameLength();
public boolean storesUpperCaseNamesInCatalog();
public boolean storesLowerCaseNamesInCatalog();
public boolean supportsTransactionId();
/**
* Use this call to check to see if the implemented database dialect supports
* a way to check on pending database transactions.
*/
public boolean supportsTransactionViews();
public boolean requiresSavepointForFallback();
public Object createSavepoint();
public Object createSavepointForFallback();
public void rollbackToSavepoint(Object savepoint);
public void releaseSavepoint(Object savepoint);
public IColumnFilter newDatabaseColumnFilter();
/**
* Implement this if the database has some type of cleanup functionality
* that needs to be run when dropping database objects. An example is
* Oracle's 'purge recyclebin'
*/
public void purge();
public void disableSyncTriggers();
public void disableSyncTriggers(String nodeId);
public void enableSyncTriggers();
public String getSyncTriggersExpression();
public String getSourceNodeExpression();
public String getDefaultSchema();
public String getDefaultCatalog();
public int getStreamingResultsFetchSize();
public String getCreateSymmetricDDL();
public String getCreateTableXML(TriggerRouter triggerRouter);
public String getCreateTableSQL(TriggerRouter trig);
public boolean isBlobSyncSupported();
public boolean isDateOverrideToTimestamp();
public boolean isClobSyncSupported();
/**
* An indicator as to whether the ability to override the default
* transaction id provided by the dialect can be overridden in the trigger
* configuration.
*/
public boolean isTransactionIdOverrideSupported();
public String getIdentifierQuoteString();
public void createTables(String xml);
public boolean supportsGetGeneratedKeys();
public boolean supportsReturningKeys();
public String getSelectLastInsertIdSql(String sequenceName);
public long insertWithGeneratedKey(final String sql, final SequenceIdentifier sequenceId);
public long insertWithGeneratedKey(final String sql, final SequenceIdentifier sequenceId,
final PreparedStatementCallback