5
0
mirror of https://github.com/apache/sqoop.git synced 2025-05-09 03:41:06 +08:00

SQOOP-2445. Sqoop2: Generic JDBC: Prevent use of tableColumns and sql at the same time

(Jarcec via Hari)
This commit is contained in:
Hari Shreedharan 2015-09-24 14:55:42 -07:00
parent 6be57ae7e6
commit a70975c669
3 changed files with 7 additions and 76 deletions

View File

@ -285,25 +285,10 @@ private void configureTableProperties(MutableContext context, LinkConfiguration
}
} else {
assert tableSql.contains(GenericJdbcConnectorConstants.SQL_CONDITIONS_TOKEN);
dataSql = tableSql;
if (tableColumns == null) {
dataSql = tableSql;
String[] queryColumns = executor.getQueryColumns(dataSql.replace(GenericJdbcConnectorConstants.SQL_CONDITIONS_TOKEN, "1 = 0"));
fieldNames = executor.columnList(queryColumns);
} else {
StringBuilder builder = new StringBuilder();
builder.append("SELECT ");
builder.append(tableColumns);
builder.append(" FROM ");
builder.append("(");
builder.append(tableSql);
builder.append(") ");
builder.append(GenericJdbcConnectorConstants.SUBQUERY_ALIAS);
dataSql = builder.toString();
fieldNames = tableColumns;
}
String[] queryColumns = executor.getQueryColumns(dataSql.replace(GenericJdbcConnectorConstants.SQL_CONDITIONS_TOKEN, "1 = 0"));
fieldNames = executor.columnList(queryColumns);
}
LOG.info("Using dataSql: " + dataSql);

View File

@ -64,7 +64,10 @@ public void validate(FromJobConfig config) {
addMessage(Status.ERROR, "Both schema name and SQL cannot be specified");
}
if (config.sql != null && config.partitionColumn == null) {
addMessage(Status.ERROR, "Partition column is required on query based import.");
addMessage(Status.ERROR, "Partition column is required on query based import");
}
if(config.sql != null && config.columns != null) {
addMessage(Status.ERROR, "Can't use sql import and specify columns at the same time");
}
}
}

View File

@ -312,34 +312,6 @@ public void testIncrementalTableSqlFromZero() throws Exception {
assertEquals(String.valueOf(START+NUMBER_OF_ROWS-1), context.getString(GenericJdbcConnectorConstants.CONNECTOR_JDBC_LAST_INCREMENTAL_VALUE));
}
@Test
@SuppressWarnings("unchecked")
public void testTableSqlWithTableColumns() throws Exception {
LinkConfiguration linkConfig = new LinkConfiguration();
FromJobConfiguration jobConfig = new FromJobConfiguration();
linkConfig.linkConfig.jdbcDriver = GenericJdbcTestConstants.DRIVER;
linkConfig.linkConfig.connectionString = GenericJdbcTestConstants.URL;
jobConfig.fromJobConfig.sql = schemalessTableSql;
jobConfig.fromJobConfig.columns = tableColumns;
jobConfig.fromJobConfig.partitionColumn = "DCOL";
MutableContext context = new MutableMapContext();
InitializerContext initializerContext = new InitializerContext(context);
@SuppressWarnings("rawtypes")
Initializer initializer = new GenericJdbcFromInitializer();
initializer.initialize(initializerContext, linkConfig, jobConfig);
verifyResult(context,
"SELECT ICOL,VCOL FROM (" + schemalessTableSql + ") SQOOP_SUBQUERY_ALIAS",
tableColumns,
"\"DCOL\"",
String.valueOf(Types.DOUBLE),
String.valueOf((double)START),
String.valueOf((double)(START+NUMBER_OF_ROWS-1)));
}
@Test
@SuppressWarnings("unchecked")
public void testTableNameWithSchema() throws Exception {
@ -473,35 +445,6 @@ public void testGetSchemaForSql() throws Exception {
assertEquals(getSchema("Query"), schema);
}
@Test
@SuppressWarnings("unchecked")
public void testTableSqlWithTableColumnsWithSchema() throws Exception {
LinkConfiguration linkConfig = new LinkConfiguration();
FromJobConfiguration jobConfig = new FromJobConfiguration();
linkConfig.linkConfig.jdbcDriver = GenericJdbcTestConstants.DRIVER;
linkConfig.linkConfig.connectionString = GenericJdbcTestConstants.URL;
jobConfig.fromJobConfig.schemaName = schemaName;
jobConfig.fromJobConfig.sql = tableSql;
jobConfig.fromJobConfig.columns = tableColumns;
jobConfig.fromJobConfig.partitionColumn = "DCOL";
MutableContext context = new MutableMapContext();
InitializerContext initializerContext = new InitializerContext(context);
@SuppressWarnings("rawtypes")
Initializer initializer = new GenericJdbcFromInitializer();
initializer.initialize(initializerContext, linkConfig, jobConfig);
verifyResult(context,
"SELECT ICOL,VCOL FROM (" + tableSql + ") SQOOP_SUBQUERY_ALIAS",
tableColumns,
"\"DCOL\"",
String.valueOf(Types.DOUBLE),
String.valueOf((double)START),
String.valueOf((double)(START+NUMBER_OF_ROWS-1)));
}
/**
* Asserts expected content inside the generated context.
*