Skip to content

Commit

Permalink
Merge branch '3.8' of https://github.com/JumpMind/symmetric-ds into 3.8
Browse files Browse the repository at this point in the history
  • Loading branch information
erilong committed Sep 28, 2016
2 parents 0ac13e7 + 214d6ba commit b18009f
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 4 deletions.
Expand Up @@ -110,6 +110,12 @@ public <T> ISqlReadCursor<T> queryForCursor(String sql, ISqlRowMapper<T> mapper)
return this.queryForCursor(sql, mapper, null, null);
}

public <T> ISqlReadCursor<T> queryForCursor(String sql, ISqlRowMapper<T> mapper,
IConnectionHandler connectionHandler, Object[] args,
int[] types) {
return queryForCursor(sql, mapper, args, types);
}

public List<Row> query(String sql) {
return query(sql, (Object[])null, (int[]) null);
}
Expand All @@ -118,6 +124,11 @@ public <T> List<T> query(String sql, ISqlRowMapper<T> mapper, Object... args) {
return query(sql, mapper, args, null);
}

@Override
public <T> List<T> queryWithHandler(String sql, ISqlRowMapper<T> mapper, IConnectionHandler conHandler, Object... params) {
return query(sql, mapper, conHandler, params, null);
}

public Row queryForRow(String sql, Object... args) {
return queryForObject(sql, new ISqlRowMapper<Row>() {
public Row mapRow(Row row) {
Expand Down Expand Up @@ -176,10 +187,19 @@ public Row mapRow(Row row) {
public <T> List<T> query(String sql, ISqlRowMapper<T> mapper, Object[] args, int[] types) {
return query(sql, -1, mapper, args, types);
}

public <T> List<T> query(String sql, ISqlRowMapper<T> mapper, IConnectionHandler handler, Object[] args, int[] types) {
return query(sql, -1, mapper, handler, args, types);
}

public <T> List<T> query(String sql, int maxNumberOfRowsToFetch, ISqlRowMapper<T> mapper,
Object[] args, int[] types) {
ISqlReadCursor<T> cursor = queryForCursor(sql, mapper, args, types);
IConnectionHandler handler = null;
return query(sql, maxNumberOfRowsToFetch, mapper, handler, args, types);
}
public <T> List<T> query(String sql, int maxNumberOfRowsToFetch, ISqlRowMapper<T> mapper,
IConnectionHandler handler, Object[] args, int[] types) {
ISqlReadCursor<T> cursor = queryForCursor(sql, mapper, handler, args, types);
try {
T next = null;
List<T> list = new ArrayList<T>();
Expand Down
@@ -0,0 +1,45 @@
package org.jumpmind.db.sql;

import java.sql.Connection;
import java.sql.SQLException;

public class ChangeCatalogConnectionHandler implements IConnectionHandler {

private String previousCatalog;

private String changeCatalog;

public ChangeCatalogConnectionHandler(String newCatalog) {
changeCatalog = newCatalog;
}

@Override
public void before(Connection connection) {
if (changeCatalog != null) {
try {
previousCatalog = connection.getCatalog();
connection.setCatalog(changeCatalog);
} catch (SQLException e) {
if (changeCatalog != null) {
try {
connection.setCatalog(previousCatalog);
} catch (SQLException ex) {
}
}
throw new SqlException(e);
}
}

}

@Override
public void after(Connection connection) {
try {
if (previousCatalog != null) {
connection.setCatalog(previousCatalog);
}
}
catch (SQLException ex) {}
}

}
@@ -0,0 +1,11 @@
package org.jumpmind.db.sql;

import java.sql.Connection;

public interface IConnectionHandler {

public void before(Connection connection);

public void after(Connection connection);

}
Expand Up @@ -64,6 +64,9 @@ public <T> Map<String, T> queryForMap(String sql, String keyColumn, String value
public <T> ISqlReadCursor<T> queryForCursor(String sql, ISqlRowMapper<T> mapper,
Object[] params, int[] types);

public <T> ISqlReadCursor<T> queryForCursor(String sql, ISqlRowMapper<T> mapper,
IConnectionHandler connectionHandler, Object[] params, int[] types);

public <T> ISqlReadCursor<T> queryForCursor(String sql, ISqlRowMapper<T> mapper);

public List<Row> query(String sql);
Expand All @@ -76,6 +79,8 @@ public <T> ISqlReadCursor<T> queryForCursor(String sql, ISqlRowMapper<T> mapper,

public <T> List<T> query(String sql, ISqlRowMapper<T> mapper, Object... params);

public <T> List<T> queryWithHandler(String sql, ISqlRowMapper<T> mapper, IConnectionHandler conHandler, Object... params);

public <T> List<T> query(String sql, ISqlRowMapper<T> mapper, Object[] params, int[] types);

public <T> List<T> query(String sql, int maxRowsToFetch, ISqlRowMapper<T> mapper, Object[] params, int[] types);
Expand Down
Expand Up @@ -56,6 +56,7 @@
import org.jumpmind.db.model.TypeMap;
import org.jumpmind.db.model.UniqueIndex;
import org.jumpmind.db.sql.IConnectionCallback;
import org.jumpmind.db.sql.IConnectionHandler;
import org.jumpmind.db.sql.JdbcSqlTemplate;
import org.jumpmind.db.sql.SqlException;
import org.slf4j.Logger;
Expand Down Expand Up @@ -1383,6 +1384,9 @@ public List<String> getSchemaNames(final String catalog) {
return sqlTemplate.execute(new IConnectionCallback<List<String>>() {
public List<String> execute(Connection connection) throws SQLException {
ArrayList<String> schemas = new ArrayList<String>();
if (getConnectionHandler() != null) {
getConnectionHandler().before(connection);
}
DatabaseMetaData meta = connection.getMetaData();
ResultSet rs = null;
try {
Expand All @@ -1404,12 +1408,19 @@ public List<String> execute(Connection connection) throws SQLException {
}
return schemas;
} finally {
if (getConnectionHandler() != null) {
getConnectionHandler().after(connection);
}
close(rs);
}
}
});
}

protected IConnectionHandler getConnectionHandler() {
return null;
}

public List<String> getTableNames(final String catalog, final String schema,
final String[] tableTypes) {
JdbcSqlTemplate sqlTemplate = (JdbcSqlTemplate) platform.getSqlTemplate();
Expand Down
Expand Up @@ -45,6 +45,8 @@
import org.jumpmind.db.platform.DatabaseMetaDataWrapper;
import org.jumpmind.db.platform.DdlException;
import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.db.sql.ChangeCatalogConnectionHandler;
import org.jumpmind.db.sql.IConnectionHandler;
import org.jumpmind.db.sql.ISqlRowMapper;
import org.jumpmind.db.sql.JdbcSqlTemplate;
import org.jumpmind.db.sql.Row;
Expand Down Expand Up @@ -269,7 +271,9 @@ public List<String> getTableNames(final String catalog, final String schema,
sql.append(" and \"TABLE_SCHEMA\"=?");
args.add(schema);
}
return platform.getSqlTemplate().query(sql.toString(), new StringMapper(), args.toArray(new Object[args.size()]));

return platform.getSqlTemplate().queryWithHandler(sql.toString(), new StringMapper(),
new ChangeCatalogConnectionHandler(catalog) ,args.toArray(new Object[args.size()]));
}

@Override
Expand Down Expand Up @@ -329,4 +333,7 @@ public Trigger mapRow(Row row) {
}, tableName, schema);
}

protected IConnectionHandler getConnectionHandler() {
return new ChangeCatalogConnectionHandler(platform.getDefaultCatalog());
}
}
Expand Up @@ -54,15 +54,27 @@ public class JdbcSqlReadCursor<T> implements ISqlReadCursor<T> {

protected int rsColumnCount;

protected IConnectionHandler connectionHandler;

public JdbcSqlReadCursor() {
}

public JdbcSqlReadCursor(JdbcSqlTemplate sqlTemplate, ISqlRowMapper<T> mapper, String sql,
Object[] values, int[] types) {
this(sqlTemplate, mapper, sql, values, types, null);
}

public JdbcSqlReadCursor(JdbcSqlTemplate sqlTemplate, ISqlRowMapper<T> mapper, String sql,
Object[] values, int[] types, IConnectionHandler connectionHandler) {
this.sqlTemplate = sqlTemplate;
this.mapper = mapper;
this.connectionHandler = connectionHandler;

try {
c = sqlTemplate.getDataSource().getConnection();
if (this.connectionHandler != null) {
this.connectionHandler.before(c);
}
originalIsolationLevel = c.getTransactionIsolation();
autoCommitFlag = c.getAutoCommit();
if (c.getTransactionIsolation() != sqlTemplate.getIsolationLevel()) {
Expand Down Expand Up @@ -144,6 +156,9 @@ protected static Row getMapForRow(ResultSet rs, ResultSetMetaData argResultSetMe
}

public void close() {
if (this.connectionHandler != null) {
this.connectionHandler.after(c);
}
JdbcSqlTemplate.close(rs);
JdbcSqlTemplate.close(st);
JdbcSqlTemplate.close(autoCommitFlag, originalIsolationLevel, c);
Expand Down
Expand Up @@ -44,6 +44,7 @@
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

Expand Down Expand Up @@ -130,8 +131,14 @@ public SymmetricLobHandler getLobHandler() {

public <T> ISqlReadCursor<T> queryForCursor(String sql, ISqlRowMapper<T> mapper, Object[] args,
int[] types) {
return queryForCursor(sql, mapper, null, args, types);
}

public <T> ISqlReadCursor<T> queryForCursor(String sql, ISqlRowMapper<T> mapper,
IConnectionHandler connectionHandler, Object[] args,
int[] types) {
long startTime = System.currentTimeMillis();
ISqlReadCursor<T> cursor = new JdbcSqlReadCursor<T>(this, mapper, sql, args, types);
ISqlReadCursor<T> cursor = new JdbcSqlReadCursor<T>(this, mapper, sql, args, types, connectionHandler);
long endTime = System.currentTimeMillis();
logSqlBuilder.logSql(log, sql, args, types, (endTime-startTime));

Expand Down Expand Up @@ -1063,4 +1070,5 @@ public void doSetValue(PreparedStatement ps, int parameterPosition, Object argVa
StatementCreatorUtils.setParameterValue(ps, parameterPosition, SqlTypeValue.TYPE_UNKNOWN, argValue);
}


}

0 comments on commit b18009f

Please sign in to comment.