protected String aliasedPrimaryKeyJoinVar(String alias, String prefix, Column[] columns) { String text = ""; for (int i = 0; i < columns.length; i++) { text += alias + ".\"" + columns[i].getName() + "\""; text += "=@" + prefix + "pk" + i; if (i + 1 < columns.length) { text += " and "; } } return text; }
protected String[] toStringData(Row row, Column[] columns) { String[] stringValues = new String[columns.length]; for (int i = 0; i < columns.length; i++) { Object value = row.get(columns[i].getName()); if (value instanceof byte[]) { stringValues[i] = new String(Base64.encodeBase64((byte[])value)); } else if (value != null) { stringValues[i] = value.toString(); } } return stringValues; }
protected String aliasedPrimaryKeyJoin(String aliasOne, String aliasTwo, Column[] columns) { StringBuilder b = new StringBuilder(); for (Column column : columns) { b.append(aliasOne).append(".\"").append(column.getName()).append("\""); b.append("=").append(aliasTwo).append(".\"").append(column.getName()).append("\""); if (!column.equals(columns[columns.length - 1])) { b.append(" and "); } } return b.toString(); }
protected int println(String key, Column[] columns) { StringBuilder buffer = new StringBuilder(key); for (int i = 0; i < columns.length; i++) { buffer.append(delimiter); buffer.append(columns[i].getName()); } println(buffer.toString()); return buffer.length(); }
public Column[] filterExcludedColumns(Column[] src) { if (src != null) { List<String> excludedColumnNames = getExcludedColumnNamesAsList(); List<Column> filtered = new ArrayList<Column>(src.length); for (int i = 0; i < src.length; i++) { Column col = src[i]; if (!excludedColumnNames.contains(col.getName().toLowerCase())) { filtered.add(col); } } return filtered.toArray(new Column[filtered.size()]); } else { return new Column[0]; } }
protected String[] getLookupKeyData(Map<String, String> lookupDataMap, DmlStatement dmlStatement) { Column[] lookupColumns = dmlStatement.getKeys(); if (lookupColumns != null && lookupColumns.length > 0) { if (lookupDataMap != null && lookupDataMap.size() > 0) { String[] keyDataAsArray = new String[lookupColumns.length]; int index = 0; for (Column keyColumn : lookupColumns) { keyDataAsArray[index++] = lookupDataMap.get(keyColumn.getName()); } return keyDataAsArray; } } return null; }
@Deprecated public Column[] orderColumns(String[] columnNames, Table table) { Column[] unorderedColumns = table.getColumns(); Column[] orderedColumns = new Column[columnNames.length]; for (int i = 0; i < columnNames.length; i++) { String name = columnNames[i]; for (Column column : unorderedColumns) { if (column.getName().equalsIgnoreCase(name)) { orderedColumns[i] = column; break; } } } return orderedColumns; }
protected String buildVirtualTableSql(String oldTriggerValue, String newTriggerValue, Column[] columns) { if (oldTriggerValue.indexOf(".") >= 0) { oldTriggerValue = oldTriggerValue.substring(oldTriggerValue.indexOf(".") + 1); } if (newTriggerValue.indexOf(".") >= 0) { newTriggerValue = newTriggerValue.substring(newTriggerValue.indexOf(".") + 1); } StringBuilder b = new StringBuilder("(SELECT "); for (Column columnType : columns) { String column = columnType.getName(); b.append("? as "); b.append("\"").append(newTriggerValue).append(column).append("\","); } for (Column columnType : columns) { String column = columnType.getName(); b.append("? AS "); b.append("\"").append(oldTriggerValue).append(column).append("\","); } b.deleteCharAt(b.length() - 1); b.append(" FROM DUAL) T "); return b.toString(); }
private void removeExcludedColumns(Conflict conflict, ArrayList<Column> lookupColumns) { String excludedString = conflict.getDetectExpressionValue( DetectExpressionKey.EXCLUDED_COLUMN_NAMES); if (!StringUtils.isBlank(excludedString)) { String excludedColumns[] = excludedString.split(","); if (excludedColumns.length > 0) { Iterator<Column> iter = lookupColumns.iterator(); while (iter.hasNext()) { Column column = iter.next(); for (String excludedColumn : excludedColumns) { if (excludedColumn.trim().equalsIgnoreCase(column.getName())) { iter.remove(); break; } } } } } }
protected String buildSelect(Table table, Column lobColumn, Column[] pkColumns) { StringBuilder sql = new StringBuilder("select "); String quote = platform.getDdlBuilder().isDelimitedIdentifierModeOn() ? platform .getDatabaseInfo().getDelimiterToken() : ""; sql.append(quote); sql.append(lobColumn.getName()); sql.append(quote); sql.append(","); sql.delete(sql.length() - 1, sql.length()); sql.append(" from "); sql.append(table.getFullyQualifiedTableName(quote)); sql.append(" where "); for (Column col : pkColumns) { sql.append(quote); sql.append(col.getName()); sql.append(quote); sql.append("=? and "); } sql.delete(sql.length() - 5, sql.length()); return sql.toString(); }
private String createCopyMgrSql() { StringBuilder sql = new StringBuilder("COPY "); String quote = platform.getDatabaseInfo().getDelimiterToken(); sql.append(targetTable.getFullyQualifiedTableName(quote)); sql.append("("); Column[] columns = targetTable.getColumns(); for (Column column : columns) { String columnName = column.getName(); if (StringUtils.isNotBlank(columnName)) { sql.append(quote); sql.append(columnName); sql.append(quote); sql.append(","); } } sql.replace(sql.length() - 1, sql.length(), ")"); sql.append("FROM STDIN with delimiter ',' csv quote ''''"); return sql.toString(); }
/** * When dealing with columns, always use this method to order the columns so * that the primary keys are first. */ public Column[] orderColumnsForTable(Table table) { if (table != null) { Column[] pks = getSyncKeysColumnsForTable(table); Column[] cols = table.getColumns(); List<Column> orderedColumns = new ArrayList<Column>(cols.length); for (int i = 0; i < pks.length; i++) { orderedColumns.add(pks[i]); } for (int i = 0; i < cols.length; i++) { boolean syncKey = false; for (int j = 0; j < pks.length; j++) { if (cols[i].getName().equals(pks[j].getName())) { syncKey = true; break; } } if (!syncKey) { orderedColumns.add(cols[i]); } } Column[] result = orderedColumns.toArray(new Column[orderedColumns.size()]); return filterExcludedColumns(result); } else { return new Column[0]; } }
protected String buildColumnNameString(String tableAlias, boolean quote, Trigger trigger, Column[] columns) { StringBuilder columnsText = new StringBuilder(); for (Column column : columns) { boolean isLob = symmetricDialect.getPlatform().isLob(column.getMappedTypeCode()); String columnName = column.getName(); if (quote) { columnName = SymmetricUtils.quote(symmetricDialect, columnName); } if (!(isLob && trigger.isUseStreamLobs())) { if (StringUtils.isNotBlank(tableAlias)) { columnsText.append(tableAlias); columnsText.append("."); } columnsText.append(columnName); } else { columnsText.append("null"); } columnsText.append(","); } return columnsText.substring(0, columnsText.length() - 1); }
protected Collection<Column> readColumns(DatabaseMetaDataWrapper metaData, String tableName) throws SQLException { ResultSet columnData = null; try { Set<String> columnNames = new HashSet<String>(); columnData = metaData.getColumns(getTableNamePattern(tableName), getDefaultColumnPattern()); List<Column> columns = new ArrayList<Column>(); while (columnData.next()) { Map<String, Object> values = readMetaData(columnData, getColumnsForColumn()); Column column = readColumn(metaData, values); if (!columnNames.contains(column.getName())) { columnNames.add(column.getName()); columns.add(column); } } return columns; } finally { close(columnData); } }
protected void removeInternalPrimaryKeyIndex(Connection connection, DatabaseMetaDataWrapper metaData, Table table) throws SQLException { Column[] pks = table.getPrimaryKeyColumns(); List<String> columnNames = new ArrayList<String>(); for (int columnIdx = 0; columnIdx < pks.length; columnIdx++) { columnNames.add(pks[columnIdx].getName()); } for (int indexIdx = 0; indexIdx < table.getIndexCount();) { IIndex index = table.getIndex(indexIdx); if (index.isUnique() && matches(index, columnNames) && isInternalPrimaryKeyIndex(connection, metaData, table, index)) { table.removeIndex(indexIdx); } else { indexIdx++; } } }
protected String buildSql(DmlType dmlType, String[] values, Column[] columns) { // TODO we should try to reuse statements // TODO support primary key updates DmlStatement statement = DmlStatementFactory.createDmlStatement(targetDatabaseName, dmlType, currentTable, useQuotedIdentifiers); Object[] objects = platform.getObjectValues(binaryEncoding, values, columns, false); Row row = new Row(columns.length); for (int i = 0; i < columns.length; i++) { row.put(columns[i].getName(), objects[i]); } return statement.buildDynamicSql(binaryEncoding, row, false, useJdbcTimestampFormat); }
@Override protected Table readTable(Connection connection, DatabaseMetaDataWrapper metaData, Map<String, Object> values) throws SQLException { Table table = super.readTable(connection, metaData, values); if (table != null) { // PostgreSQL also returns unique indices for non-pk auto-increment // columns which are of the form "[table]_[column]_key" HashMap<String,IIndex> uniquesByName = new HashMap<String,IIndex>(); for (int indexIdx = 0; indexIdx < table.getIndexCount(); indexIdx++) { IIndex index = table.getIndex(indexIdx); if (index.isUnique() && (index.getName() != null)) { uniquesByName.put(index.getName(), index); } } for (int columnIdx = 0; columnIdx < table.getColumnCount(); columnIdx++) { Column column = table.getColumn(columnIdx); if (column.isAutoIncrement() && !column.isPrimaryKey()) { String indexName = table.getName() + "_" + column.getName() + "_key"; if (uniquesByName.containsKey(indexName)) { table.removeIndex((IIndex) uniquesByName.get(indexName)); uniquesByName.remove(indexName); } } } } setPrimaryKeyConstraintName(connection, table); return table; }
for (int i = 0; i < columns.length; i++) { if (values[i] != null) { write("\t\t<field name=\"", columns[i].getName(), "\">", StringEscapeUtils.escapeXml(values[i]), "</field>\n"); } else { write("\t\t<field name=\"", columns[i].getName(), "\" xsi:nil=\"true\" />\n"); for (int i = 0; i < columns.length; i++) { if (values[i] != null) { write("\t\t<data key=\"", columns[i].getName(), "\">", StringEscapeUtils.escapeXml(values[i]), "</data>\n"); } else { write("\t\t<data key=\"", columns[i].getName(), "\" xsi:nil=\"true\" />\n");