You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by jh...@apache.org on 2014/05/28 11:36:32 UTC
[2/2] git commit: TAJO-842: NULL handling in JDBC. (Hyoungjun Kim via
jinho)
TAJO-842: NULL handling in JDBC. (Hyoungjun Kim via jinho)
Closes #18
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/300fde0a
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/300fde0a
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/300fde0a
Branch: refs/heads/master
Commit: 300fde0a6f26bab558d5bfe50498b1c4c5cccbfd
Parents: c2477f4
Author: jinossy <ji...@gmail.com>
Authored: Wed May 28 18:33:39 2014 +0900
Committer: jinossy <ji...@gmail.com>
Committed: Wed May 28 18:33:39 2014 +0900
----------------------------------------------------------------------
.../tajo/cli/DefaultTajoCliOutputFormatter.java | 7 +-
.../java/org/apache/tajo/cli/SetCommand.java | 1 +
.../main/java/org/apache/tajo/cli/TajoCli.java | 23 +++-
.../org/apache/tajo/jdbc/TajoResultSetBase.java | 72 +++++++++-
.../java/org/apache/tajo/conf/TajoConf.java | 6 +-
.../engine/planner/physical/StoreTableExec.java | 4 +
.../org/apache/tajo/master/GlobalEngine.java | 7 +-
.../apache/tajo/master/querymaster/Query.java | 6 +
.../main/java/org/apache/tajo/worker/Task.java | 2 +-
.../apache/tajo/worker/TaskAttemptContext.java | 13 +-
.../java/org/apache/tajo/QueryTestCaseBase.java | 5 +-
.../org/apache/tajo/TajoTestingCluster.java | 6 +-
.../java/org/apache/tajo/cli/TestTajoCli.java | 58 ++++++++
.../org/apache/tajo/client/TestTajoClient.java | 61 +++++++-
.../planner/physical/TestBNLJoinExec.java | 6 +-
.../planner/physical/TestBSTIndexExec.java | 3 +-
.../planner/physical/TestExternalSortExec.java | 3 +-
.../physical/TestFullOuterHashJoinExec.java | 10 +-
.../physical/TestFullOuterMergeJoinExec.java | 13 +-
.../planner/physical/TestHashAntiJoinExec.java | 3 +-
.../planner/physical/TestHashJoinExec.java | 5 +-
.../planner/physical/TestHashSemiJoinExec.java | 3 +-
.../physical/TestLeftOuterHashJoinExec.java | 11 +-
.../physical/TestLeftOuterNLJoinExec.java | 11 +-
.../planner/physical/TestMergeJoinExec.java | 3 +-
.../engine/planner/physical/TestNLJoinExec.java | 5 +-
.../planner/physical/TestPhysicalPlanner.java | 73 ++++++----
.../physical/TestProgressExternalSortExec.java | 3 +-
.../physical/TestRightOuterHashJoinExec.java | 7 +-
.../physical/TestRightOuterMergeJoinExec.java | 13 +-
.../engine/planner/physical/TestSortExec.java | 4 +-
.../tajo/engine/query/TestInsertQuery.java | 3 +-
.../tajo/engine/query/TestNullValues.java | 138 ++++++++++++++++++-
.../tajo/worker/TestRangeRetrieverHandler.java | 7 +-
.../testSplitPartNested.result | 4 +-
.../TestCaseByCases/testTAJO415Case.result | 4 +-
.../TestJoinBroadcast/testFullOuterJoin1.result | 4 +-
.../testFullOuterJoinWithEmptyTable1.result | 10 +-
.../TestJoinBroadcast/testLeftOuterJoin1.result | 4 +-
.../testLeftOuterJoinWithConstantExpr1.result | 4 +-
.../testLeftOuterJoinWithConstantExpr2.result | 4 +-
.../testLeftOuterJoinWithEmptyTable1.result | 10 +-
.../testRightOuterJoin1.result | 4 +-
.../testRightOuterJoinWithEmptyTable1.result | 10 +-
.../TestJoinQuery/testFullOuterJoin1.result | 4 +-
.../testFullOuterJoinWithEmptyTable1.result | 10 +-
.../TestJoinQuery/testLeftOuterJoin1.result | 4 +-
.../testLeftOuterJoinWithConstantExpr1.result | 4 +-
.../testLeftOuterJoinWithConstantExpr2.result | 4 +-
.../testLeftOuterJoinWithEmptyTable1.result | 10 +-
.../testOuterJoinAndCaseWhen1.result | 10 +-
.../TestJoinQuery/testRightOuterJoin1.result | 4 +-
.../testRightOuterJoinWithEmptyTable1.result | 10 +-
.../results/TestNetTypes/testJoin.result | 8 +-
.../results/TestNetTypes/testSort2.result | 3 +-
.../testCaseWhenWithoutElse.result | 2 +-
.../results/TestTablePartitions/case1.result | 4 +-
.../results/TestTablePartitions/case2.result | 8 +-
.../testSelectResultWithNullFalse.result | 8 ++
.../testSelectResultWithNullTrue.result | 8 ++
60 files changed, 587 insertions(+), 167 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java b/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java
index dd1f911..a619981 100644
--- a/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java
+++ b/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java
@@ -24,6 +24,7 @@ import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.statistics.TableStats;
import org.apache.tajo.client.QueryStatus;
import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.conf.TajoConf.ConfVars;
import org.apache.tajo.util.FileUtil;
import java.io.InputStream;
@@ -36,6 +37,7 @@ public class DefaultTajoCliOutputFormatter implements TajoCliOutputFormatter {
private int printPauseRecords;
private boolean printPause;
private boolean printErrorTrace;
+ private String nullChar;
@Override
public void init(TajoConf tajoConf) {
@@ -44,6 +46,7 @@ public class DefaultTajoCliOutputFormatter implements TajoCliOutputFormatter {
this.printPause = tajoConf.getBoolVar(TajoConf.ConfVars.CLI_PRINT_PAUSE);
this.printPauseRecords = tajoConf.getIntVar(TajoConf.ConfVars.CLI_PRINT_PAUSE_NUM_RECORDS);
this.printErrorTrace = tajoConf.getBoolVar(TajoConf.ConfVars.CLI_PRINT_ERROR_TRACE);
+ this.nullChar = tajoConf.getVar(ConfVars.CLI_NULL_CHAR);
}
@Override
@@ -90,9 +93,9 @@ public class DefaultTajoCliOutputFormatter implements TajoCliOutputFormatter {
while (res.next()) {
for (int i = 1; i <= numOfColumns; i++) {
if (i > 1) sout.print(", ");
- String columnValue = res.getObject(i).toString();
+ String columnValue = res.getString(i);
if(res.wasNull()){
- sout.print("null");
+ sout.print(nullChar);
} else {
sout.print(columnValue);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-client/src/main/java/org/apache/tajo/cli/SetCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/SetCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/SetCommand.java
index 8b31d39..c694507 100644
--- a/tajo-client/src/main/java/org/apache/tajo/cli/SetCommand.java
+++ b/tajo-client/src/main/java/org/apache/tajo/cli/SetCommand.java
@@ -44,6 +44,7 @@ public class SetCommand extends TajoShellCommand {
Map<String, String> variables = new HashMap<String, String>();
variables.put(cmd[1], cmd[2]);
client.updateSessionVariables(variables);
+ context.setVariable(cmd[1], cmd[2]);
} else {
context.getOutput().println("usage: \\set [[NAME] VALUE]");
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java b/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java
index e0ca62a..85787ca 100644
--- a/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java
+++ b/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java
@@ -117,6 +117,15 @@ public class TajoCli {
public TajoConf getConf() {
return conf;
}
+
+ public void setVariable(String key, String value) {
+ conf.set(key, value);
+ try {
+ initFormatter();
+ } catch (Exception e) {
+ System.err.println(ERROR_PREFIX + e.getMessage());
+ }
+ }
}
public TajoCli(TajoConf c, String [] args, InputStream in, OutputStream out) throws Exception {
@@ -125,10 +134,7 @@ public class TajoCli {
this.reader = new ConsoleReader(sin, out);
this.reader.setExpandEvents(false);
this.sout = new PrintWriter(reader.getOutput());
- Class formatterClass = conf.getClass(ConfVars.CLI_OUTPUT_FORMATTER_CLASS.varname,
- DefaultTajoCliOutputFormatter.class);
- this.outputFormatter = (TajoCliOutputFormatter)formatterClass.newInstance();
- this.outputFormatter.init(conf);
+ initFormatter();
CommandLineParser parser = new PosixParser();
CommandLine cmd = parser.parse(options, args);
@@ -217,6 +223,15 @@ public class TajoCli {
addShutdownHook();
}
+ private void initFormatter() throws Exception {
+ Class formatterClass = conf.getClass(ConfVars.CLI_OUTPUT_FORMATTER_CLASS.varname,
+ DefaultTajoCliOutputFormatter.class);
+ if (outputFormatter == null || !outputFormatter.getClass().equals(formatterClass)) {
+ outputFormatter = (TajoCliOutputFormatter)formatterClass.newInstance();
+ }
+ outputFormatter.init(conf);
+ }
+
public TajoCliContext getContext() {
return context;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java
index 60eb2f1..bdcf216 100644
--- a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java
+++ b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java
@@ -21,10 +21,7 @@ package org.apache.tajo.jdbc;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.conf.TajoConf;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.datum.TimeDatum;
-import org.apache.tajo.datum.TimestampDatum;
+import org.apache.tajo.datum.*;
import org.apache.tajo.storage.Tuple;
import java.io.IOException;
@@ -67,6 +64,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public boolean getBoolean(int fieldId) throws SQLException {
Datum datum = cur.get(fieldId - 1);
handleNull(datum);
+ if (wasNull) {
+ return false;
+ }
return datum.asBool();
}
@@ -74,6 +74,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public boolean getBoolean(String colName) throws SQLException {
Datum datum = cur.get(findColumn(colName));
handleNull(datum);
+ if (wasNull) {
+ return false;
+ }
return datum.asBool();
}
@@ -81,6 +84,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public byte getByte(int fieldId) throws SQLException {
Datum datum = cur.get(fieldId - 1);
handleNull(datum);
+ if (wasNull) {
+ return 0;
+ }
return datum.asByte();
}
@@ -88,6 +94,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public byte getByte(String name) throws SQLException {
Datum datum = cur.get(findColumn(name));
handleNull(datum);
+ if (wasNull) {
+ return 0;
+ }
return datum.asByte();
}
@@ -95,6 +104,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public byte[] getBytes(int fieldId) throws SQLException {
Datum datum = cur.get(fieldId - 1);
handleNull(datum);
+ if (wasNull) {
+ return null;
+ }
return datum.asByteArray();
}
@@ -102,6 +114,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public byte[] getBytes(String name) throws SQLException {
Datum datum = cur.get(findColumn(name));
handleNull(datum);
+ if (wasNull) {
+ return null;
+ }
return datum.asByteArray();
}
@@ -109,6 +124,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public double getDouble(int fieldId) throws SQLException {
Datum datum = cur.get(fieldId - 1);
handleNull(datum);
+ if (wasNull) {
+ return 0.0d;
+ }
return datum.asFloat8();
}
@@ -116,6 +134,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public double getDouble(String name) throws SQLException {
Datum datum = cur.get(findColumn(name));
handleNull(datum);
+ if (wasNull) {
+ return 0.0d;
+ }
return datum.asFloat8();
}
@@ -123,6 +144,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public float getFloat(int fieldId) throws SQLException {
Datum datum = cur.get(fieldId - 1);
handleNull(datum);
+ if (wasNull) {
+ return 0.0f;
+ }
return datum.asFloat4();
}
@@ -130,6 +154,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public float getFloat(String name) throws SQLException {
Datum datum = cur.get(findColumn(name));
handleNull(datum);
+ if (wasNull) {
+ return 0.0f;
+ }
return datum.asFloat4();
}
@@ -137,6 +164,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public int getInt(int fieldId) throws SQLException {
Datum datum = cur.get(fieldId - 1);
handleNull(datum);
+ if (wasNull) {
+ return 0;
+ }
return datum.asInt4();
}
@@ -144,6 +174,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public int getInt(String name) throws SQLException {
Datum datum = cur.get(findColumn(name));
handleNull(datum);
+ if (wasNull) {
+ return 0;
+ }
return datum.asInt4();
}
@@ -151,6 +184,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public long getLong(int fieldId) throws SQLException {
Datum datum = cur.get(fieldId - 1);
handleNull(datum);
+ if (wasNull) {
+ return 0;
+ }
return datum.asInt8();
}
@@ -158,6 +194,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public long getLong(String name) throws SQLException {
Datum datum = cur.get(findColumn(name));
handleNull(datum);
+ if (wasNull) {
+ return 0;
+ }
return datum.asInt8();
}
@@ -166,6 +205,9 @@ public abstract class TajoResultSetBase implements ResultSet {
Datum d = cur.get(fieldId - 1);
handleNull(d);
+ if (wasNull) {
+ return null;
+ }
TajoDataTypes.Type dataType = schema.getColumn(fieldId - 1).getDataType().getType();
switch(dataType) {
@@ -200,6 +242,9 @@ public abstract class TajoResultSetBase implements ResultSet {
public short getShort(int fieldId) throws SQLException {
Datum datum = cur.get(fieldId - 1);
handleNull(datum);
+ if (wasNull) {
+ return 0;
+ }
return datum.asInt2();
}
@@ -207,24 +252,37 @@ public abstract class TajoResultSetBase implements ResultSet {
public short getShort(String name) throws SQLException {
Datum datum = cur.get(findColumn(name));
handleNull(datum);
+ if (wasNull) {
+ return 0;
+ }
return datum.asInt2();
}
@Override
public String getString(int fieldId) throws SQLException {
Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- return datum.asChars();
+ return getString(datum, fieldId);
}
@Override
public String getString(String name) throws SQLException {
- Datum datum = cur.get(findColumn(name));
+ int id = findColumn(name);
+ Datum datum = cur.get(id);
+ return getString(datum, id + 1);
+ }
+
+ private String getString(Datum datum, int fieldId) throws SQLException {
handleNull(datum);
+ if (wasNull) {
+ return null;
+ }
+
TajoDataTypes.Type dataType = datum.type();
switch(dataType) {
+ case BOOLEAN:
+ return String.valueOf(datum.asBool());
case TIME: {
return ((TimeDatum)datum).asChars(TajoConf.getCurrentTimeZone(), false);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java b/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
index e5f6ca1..9e61967 100644
--- a/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
+++ b/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
@@ -324,13 +324,17 @@ public class TajoConf extends Configuration {
CLI_PRINT_PAUSE("tajo.cli.print.pause", true),
CLI_PRINT_ERROR_TRACE("tajo.cli.print.error.trace", true),
CLI_OUTPUT_FORMATTER_CLASS("tajo.cli.output.formatter", "org.apache.tajo.cli.DefaultTajoCliOutputFormatter"),
+ CLI_NULL_CHAR("tajo.cli.nullchar", ""),
//TIME & DATE
TAJO_TIMEZONE("tajo.timezone", System.getProperty("user.timezone")),
TAJO_DATE_ORDER("tajo.date.order", "YMD"),
//PLANNER
- PLANNER_USE_FILTER_PUSHDOWN("tajo.planner.use.filter.pushdown", true)
+ PLANNER_USE_FILTER_PUSHDOWN("tajo.planner.use.filter.pushdown", true),
+
+ // FILE FORMAT
+ CSVFILE_NULL("tajo.csvfile.null", "\\\\N")
;
public final String varname;
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java
index b0c3c31..b1d0400 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java
@@ -20,9 +20,11 @@ package org.apache.tajo.engine.planner.physical;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.TableMeta;
+import org.apache.tajo.conf.TajoConf.ConfVars;
import org.apache.tajo.engine.planner.logical.InsertNode;
import org.apache.tajo.engine.planner.logical.PersistentStoreNode;
import org.apache.tajo.storage.Appender;
+import org.apache.tajo.storage.StorageConstants;
import org.apache.tajo.storage.StorageManagerFactory;
import org.apache.tajo.storage.Tuple;
import org.apache.tajo.worker.TaskAttemptContext;
@@ -57,6 +59,8 @@ public class StoreTableExec extends UnaryPhysicalExec {
appender = StorageManagerFactory.getStorageManager(context.getConf()).getAppender(meta,
createTableNode.getTableSchema(), context.getOutputPath());
} else {
+ String nullChar = context.getQueryContext().get(ConfVars.CSVFILE_NULL.varname, ConfVars.CSVFILE_NULL.defaultVal);
+ meta.putOption(StorageConstants.CSVFILE_NULL, nullChar);
appender = StorageManagerFactory.getStorageManager(context.getConf()).getAppender(meta, outSchema,
context.getOutputPath());
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
index 3b81ce2..2b06a42 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
@@ -120,6 +120,7 @@ public class GlobalEngine extends AbstractService {
public SubmitQueryResponse executeQuery(Session session, String query, boolean isJson) {
LOG.info("Query: " + query);
QueryContext queryContext = new QueryContext();
+ queryContext.putAll(session.getAllVariables());
Expr planningContext;
try {
@@ -257,7 +258,7 @@ public class GlobalEngine extends AbstractService {
boolean isInsert = rootNode.getChild() != null && rootNode.getChild().getType() == NodeType.INSERT;
if (isInsert) {
InsertNode insertNode = rootNode.getChild();
- insertNonFromQuery(insertNode, responseBuilder);
+ insertNonFromQuery(queryContext, insertNode, responseBuilder);
} else {
Schema schema = PlannerUtil.targetToSchema(targets);
RowStoreUtil.RowStoreEncoder encoder = RowStoreUtil.createEncoder(schema);
@@ -300,7 +301,7 @@ public class GlobalEngine extends AbstractService {
return response;
}
- private void insertNonFromQuery(InsertNode insertNode, SubmitQueryResponse.Builder responseBuilder)
+ private void insertNonFromQuery(QueryContext queryContext, InsertNode insertNode, SubmitQueryResponse.Builder responseBuilder)
throws Exception {
String nodeUniqName = insertNode.getTableName() == null ? insertNode.getPath().getName() : insertNode.getTableName();
String queryId = nodeUniqName + "_" + System.currentTimeMillis();
@@ -321,7 +322,7 @@ public class GlobalEngine extends AbstractService {
}
TaskAttemptContext taskAttemptContext =
- new TaskAttemptContext(context.getConf(), null, (CatalogProtos.FragmentProto[]) null, stagingDir);
+ new TaskAttemptContext(context.getConf(), queryContext, null, (CatalogProtos.FragmentProto[]) null, stagingDir);
taskAttemptContext.setOutputPath(new Path(stagingResultDir, "part-01-000000"));
EvalExprExec evalExprExec = new EvalExprExec(taskAttemptContext, (EvalExprNode) insertNode.getChild());
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Query.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Query.java b/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Query.java
index 04e82ca..0ce6d7e 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Query.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Query.java
@@ -37,6 +37,7 @@ import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.TableMeta;
import org.apache.tajo.catalog.statistics.TableStats;
import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.conf.TajoConf.ConfVars;
import org.apache.tajo.engine.planner.global.DataChannel;
import org.apache.tajo.engine.planner.global.ExecutionBlock;
import org.apache.tajo.engine.planner.global.ExecutionBlockCursor;
@@ -47,6 +48,7 @@ import org.apache.tajo.engine.planner.logical.NodeType;
import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.master.event.*;
import org.apache.tajo.storage.AbstractStorageManager;
+import org.apache.tajo.storage.StorageConstants;
import org.apache.tajo.util.TUtil;
import java.io.IOException;
@@ -479,6 +481,10 @@ public class Query implements EventHandler<QueryEvent> {
Path finalOutputDir) throws Exception {
SubQuery lastStage = query.getSubQuery(finalExecBlockId);
TableMeta meta = lastStage.getTableMeta();
+
+ String nullChar = queryContext.get(ConfVars.CSVFILE_NULL.varname, ConfVars.CSVFILE_NULL.defaultVal);
+ meta.putOption(StorageConstants.CSVFILE_NULL, nullChar);
+
TableStats stats = lastStage.getResultStats();
TableDesc resultTableDesc =
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/main/java/org/apache/tajo/worker/Task.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/worker/Task.java b/tajo-core/src/main/java/org/apache/tajo/worker/Task.java
index 4e4f5fc..bed6a93 100644
--- a/tajo-core/src/main/java/org/apache/tajo/worker/Task.java
+++ b/tajo-core/src/main/java/org/apache/tajo/worker/Task.java
@@ -145,7 +145,7 @@ public class Task {
this.taskDir = StorageUtil.concatPath(taskRunnerContext.getBaseDir(),
taskId.getQueryUnitId().getId() + "_" + taskId.getId());
- this.context = new TaskAttemptContext(systemConf, taskId,
+ this.context = new TaskAttemptContext(systemConf, queryContext, taskId,
request.getFragments().toArray(new FragmentProto[request.getFragments().size()]), taskDir);
this.context.setDataChannel(request.getDataChannel());
this.context.setEnforcer(request.getEnforcer());
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java b/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java
index f42df1d..b1246ec 100644
--- a/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java
+++ b/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java
@@ -30,6 +30,7 @@ import org.apache.tajo.catalog.statistics.TableStats;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.global.DataChannel;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.storage.fragment.Fragment;
import org.apache.tajo.storage.fragment.FragmentConvertor;
@@ -68,11 +69,13 @@ public class TaskAttemptContext {
private Path outputPath;
private DataChannel dataChannel;
private Enforcer enforcer;
+ private QueryContext queryContext;
- public TaskAttemptContext(TajoConf conf, final QueryUnitAttemptId queryId,
+ public TaskAttemptContext(TajoConf conf, QueryContext queryContext, final QueryUnitAttemptId queryId,
final FragmentProto[] fragments,
final Path workDir) {
this.conf = conf;
+ this.queryContext = queryContext;
this.queryId = queryId;
if (fragments != null) {
@@ -94,9 +97,9 @@ public class TaskAttemptContext {
}
@VisibleForTesting
- public TaskAttemptContext(TajoConf conf, final QueryUnitAttemptId queryId,
+ public TaskAttemptContext(TajoConf conf, QueryContext queryContext, final QueryUnitAttemptId queryId,
final Fragment [] fragments, final Path workDir) {
- this(conf, queryId, FragmentConvertor.toFragmentProtoArray(fragments), workDir);
+ this(conf, queryContext, queryId, FragmentConvertor.toFragmentProtoArray(fragments), workDir);
}
public TajoConf getConf() {
@@ -269,4 +272,8 @@ public class TaskAttemptContext {
return false;
}
}
+
+ public QueryContext getQueryContext() {
+ return queryContext;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java b/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java
index 1d6ee86..d68eb5f 100644
--- a/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java
+++ b/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java
@@ -410,7 +410,10 @@ public class QueryTestCaseBase {
while (resultSet.next()) {
for (int i = 1; i <= numOfColumns; i++) {
if (i > 1) sb.append(",");
- String columnValue = resultSet.getObject(i).toString();
+ String columnValue = resultSet.getString(i);
+ if (resultSet.wasNull()) {
+ columnValue = "null";
+ }
sb.append(columnValue);
}
sb.append("\n");
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/TajoTestingCluster.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/TajoTestingCluster.java b/tajo-core/src/test/java/org/apache/tajo/TajoTestingCluster.java
index 011ed07..06d2bab 100644
--- a/tajo-core/src/test/java/org/apache/tajo/TajoTestingCluster.java
+++ b/tajo-core/src/test/java/org/apache/tajo/TajoTestingCluster.java
@@ -33,7 +33,6 @@ import org.apache.hadoop.util.ShutdownHookManager;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
import org.apache.tajo.catalog.*;
-import org.apache.tajo.util.KeyValueSet;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.client.TajoClient;
import org.apache.tajo.conf.TajoConf;
@@ -41,6 +40,7 @@ import org.apache.tajo.conf.TajoConf.ConfVars;
import org.apache.tajo.master.TajoMaster;
import org.apache.tajo.master.rm.TajoWorkerResourceManager;
import org.apache.tajo.util.CommonTestingUtil;
+import org.apache.tajo.util.KeyValueSet;
import org.apache.tajo.util.NetUtils;
import org.apache.tajo.worker.TajoWorker;
@@ -560,7 +560,7 @@ public class TajoTestingCluster {
public static ResultSet run(String[] names,
Schema[] schemas,
- KeyValueSet option,
+ KeyValueSet tableOption,
String[][] tables,
String query) throws Exception {
TpchTestBase instance = TpchTestBase.getInstance();
@@ -587,7 +587,7 @@ public class TajoTestingCluster {
out.write((tables[i][j]+"\n").getBytes());
}
out.close();
- TableMeta meta = CatalogUtil.newTableMeta(CatalogProtos.StoreType.CSV, option);
+ TableMeta meta = CatalogUtil.newTableMeta(CatalogProtos.StoreType.CSV, tableOption);
client.createExternalTable(names[i], schemas[i], tablePath, meta);
}
Thread.sleep(1000);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java b/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java
index b3fbda4..a49f23b 100644
--- a/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java
+++ b/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java
@@ -25,6 +25,7 @@ import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.tajo.TajoTestingCluster;
import org.apache.tajo.TpchTestBase;
+import org.apache.tajo.client.QueryStatus;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.conf.TajoConf.ConfVars;
import org.apache.tajo.storage.StorageUtil;
@@ -36,6 +37,7 @@ import org.junit.rules.TestName;
import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.PrintWriter;
import java.net.URL;
import static org.junit.Assert.assertEquals;
@@ -195,6 +197,58 @@ public class TestTajoCli {
}
}
+ @Test
+ public void testSelectResultWithNullFalse() throws Exception {
+ String sql =
+ "select\n" +
+ " c_custkey,\n" +
+ " orders.o_orderkey,\n" +
+ " orders.o_orderstatus \n" +
+ "from\n" +
+ " orders full outer join customer on c_custkey = o_orderkey\n" +
+ "order by\n" +
+ " c_custkey,\n" +
+ " orders.o_orderkey;\n";
+
+ TajoConf tajoConf = TpchTestBase.getInstance().getTestingCluster().getConfiguration();
+ tajoConf.setVar(ConfVars.CLI_OUTPUT_FORMATTER_CLASS, TajoCliOutputTestFormatter.class.getName());
+
+ tajoConf.setVar(ConfVars.CLI_NULL_CHAR, "");
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ tajoCli = new TajoCli(tajoConf, new String[]{}, System.in, out);
+ tajoCli.executeScript(sql);
+
+ String consoleResult = new String(out.toByteArray());
+ assertOutputResult(consoleResult);
+ }
+
+ @Test
+ public void testSelectResultWithNullTrue() throws Exception {
+ String sql =
+ "select\n" +
+ " c_custkey,\n" +
+ " orders.o_orderkey,\n" +
+ " orders.o_orderstatus \n" +
+ "from\n" +
+ " orders full outer join customer on c_custkey = o_orderkey\n" +
+ "order by\n" +
+ " c_custkey,\n" +
+ " orders.o_orderkey;\n";
+
+ TajoConf tajoConf = TpchTestBase.getInstance().getTestingCluster().getConfiguration();
+ tajoConf.setVar(ConfVars.CLI_OUTPUT_FORMATTER_CLASS, TajoCliOutputTestFormatter.class.getName());
+
+ tajoConf.setVar(ConfVars.CLI_NULL_CHAR, "testnull");
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ tajoCli = new TajoCli(tajoConf, new String[]{}, System.in, out);
+ tajoCli.executeScript(sql);
+
+ String consoleResult = new String(out.toByteArray());
+ assertOutputResult(consoleResult);
+ }
+
private void assertOutputResult(String actual) throws Exception {
assertOutputResult(name.getMethodName() + ".result", actual);
}
@@ -226,5 +280,9 @@ public class TestTajoCli {
protected String getResponseTimeReadable(float responseTime) {
return "";
}
+ @Override
+ public void printProgress(PrintWriter sout, QueryStatus status) {
+ //nothing to do
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java b/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java
index 49e6874..732f02c 100644
--- a/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java
+++ b/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java
@@ -24,6 +24,7 @@ import com.google.common.collect.Sets;
import com.google.protobuf.ServiceException;
import com.sun.org.apache.commons.logging.Log;
import com.sun.org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.tajo.*;
@@ -32,8 +33,10 @@ import org.apache.tajo.catalog.FunctionDesc;
import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.conf.TajoConf.ConfVars;
import org.apache.tajo.ipc.ClientProtos;
import org.apache.tajo.jdbc.TajoResultSet;
+import org.apache.tajo.storage.StorageConstants;
import org.apache.tajo.storage.StorageUtil;
import org.apache.tajo.util.CommonTestingUtil;
import org.junit.AfterClass;
@@ -42,12 +45,12 @@ import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.io.IOException;
+import java.io.InputStream;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import static org.junit.Assert.*;
-import static org.junit.Assert.assertEquals;
@Category(IntegrationTest.class)
public class TestTajoClient {
@@ -162,6 +165,13 @@ public class TestTajoClient {
public final void testSessionVariables() throws IOException, ServiceException, InterruptedException {
String prefixName = "key_";
String prefixValue = "val_";
+
+ List<String> unsetList = new ArrayList<String>();
+ for(Map.Entry<String, String> entry: client.getAllSessionVariables().entrySet()) {
+ unsetList.add(entry.getKey());
+ }
+ client.unsetSessionVariables(unsetList);
+
for (int i = 0; i < 10; i++) {
String key = prefixName + i;
String val = prefixValue + i;
@@ -663,4 +673,53 @@ public class TestTajoClient {
client.closeQuery(queryId);
}
}
+
+ @Test
+ public void testSetCvsNull() throws Exception {
+ String sql =
+ "select\n" +
+ " c_custkey,\n" +
+ " orders.o_orderkey,\n" +
+ " orders.o_orderstatus \n" +
+ "from\n" +
+ " orders full outer join customer on c_custkey = o_orderkey\n" +
+ "order by\n" +
+ " c_custkey,\n" +
+ " orders.o_orderkey;\n";
+
+ TajoConf tajoConf = TpchTestBase.getInstance().getTestingCluster().getConfiguration();
+
+ Map<String, String> variables = new HashMap<String, String>();
+ variables.put(ConfVars.CSVFILE_NULL.varname, "\\\\T");
+ client.updateSessionVariables(variables);
+
+ TajoResultSet res = (TajoResultSet)client.executeQueryAndGetResult(sql);
+
+ assertEquals(res.getTableDesc().getMeta().getOption(StorageConstants.CSVFILE_NULL), "\\\\T");
+
+ Path path = res.getTableDesc().getPath();
+ FileSystem fs = path.getFileSystem(tajoConf);
+
+ FileStatus[] files = fs.listStatus(path);
+ assertNotNull(files);
+ assertEquals(1, files.length);
+
+ InputStream in = fs.open(files[0].getPath());
+ byte[] buf = new byte[1024];
+
+
+ int readBytes = in.read(buf);
+ assertTrue(readBytes > 0);
+
+ // text type field's value is replaced with \T
+ String expected = "1|1|O\n" +
+ "2|2|O\n" +
+ "3|3|F\n" +
+ "4||\\T\n" +
+ "5||\\T\n";
+
+ String resultDatas = new String(buf, 0, readBytes);
+
+ assertEquals(expected, resultDatas);
+ }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
index c79796b..d84796a 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
@@ -34,6 +34,7 @@ import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.JoinNode;
import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.NodeType;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
import org.apache.tajo.util.CommonTestingUtil;
@@ -151,7 +152,7 @@ public class TestBNLJoinExec {
Integer.MAX_VALUE);
FileFragment[] merged = TUtil.concat(empFrags, peopleFrags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testBNLCrossJoin");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -188,7 +189,8 @@ public class TestBNLJoinExec {
enforcer.enforceJoinAlgorithm(joinNode.getPID(), JoinAlgorithm.BLOCK_NESTED_LOOP_JOIN);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testBNLInnerJoin");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(),
merged, workDir);
ctx.setEnforcer(enforcer);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
index a47bde3..bfc3522 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
@@ -38,6 +38,7 @@ import org.apache.tajo.engine.planner.LogicalPlanner;
import org.apache.tajo.engine.planner.PhysicalPlannerImpl;
import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.ScanNode;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
import org.apache.tajo.storage.fragment.FragmentConvertor;
@@ -168,7 +169,7 @@ public class TestBSTIndexExec {
FileFragment[] frags = StorageManager.splitNG(conf, "default.employee", meta, tablePath, Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testEqual");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), new FileFragment[] { frags[0] }, workDir);
Expr expr = analyzer.parse(QUERY);
LogicalPlan plan = planner.createPlan(LocalTajoTestingUtility.createDummySession(), expr);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
index ff3befe..1ce5b5b 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
@@ -33,6 +33,7 @@ import org.apache.tajo.engine.parser.SQLAnalyzer;
import org.apache.tajo.engine.planner.*;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
import org.apache.tajo.util.CommonTestingUtil;
@@ -120,7 +121,7 @@ public class TestExternalSortExec {
FileFragment[] frags = StorageManager.splitNG(conf, "default.employee", employee.getMeta(), employee.getPath(),
Integer.MAX_VALUE);
Path workDir = new Path(testDir, TestExternalSortExec.class.getName());
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[0]);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
index b05688d..1a8a90e 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
@@ -34,6 +34,7 @@ import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.JoinNode;
import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.NodeType;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.master.session.Session;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
@@ -269,7 +270,7 @@ public class TestFullOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(dep3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestFullOuterHashJoinExec0");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -306,7 +307,7 @@ public class TestFullOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(job3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestFullOuter_HashJoinExec1");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -342,7 +343,7 @@ public class TestFullOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, job3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestFullOuterHashJoinExec2");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -380,7 +381,8 @@ public class TestFullOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, phone3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestFullOuterHashJoinExec3");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(), merged,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(), merged,
workDir);
ctx.setEnforcer(enforcer);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
index 0386179..50e5906 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
@@ -35,6 +35,7 @@ import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.JoinNode;
import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.NodeType;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.master.session.Session;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
@@ -315,7 +316,7 @@ public class TestFullOuterMergeJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, dep3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testFullOuterMergeJoin0");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -352,7 +353,7 @@ public class TestFullOuterMergeJoinExec {
FileFragment[] merged = TUtil.concat(job3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testFullOuterMergeJoin1");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -389,7 +390,7 @@ public class TestFullOuterMergeJoinExec {
FileFragment[] merged = TUtil.concat(job3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testFullOuterMergeJoin2");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -427,7 +428,7 @@ public class TestFullOuterMergeJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, dep4Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testFullOuterMergeJoin3");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -468,7 +469,7 @@ public class TestFullOuterMergeJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, phone3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testFullOuterMergeJoin4");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -507,7 +508,7 @@ public class TestFullOuterMergeJoinExec {
FileFragment[] merged = TUtil.concat(phone3Frags,emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testFullOuterMergeJoin5");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
index 1dbbcf0..794ca79 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
@@ -32,6 +32,7 @@ import org.apache.tajo.engine.parser.SQLAnalyzer;
import org.apache.tajo.engine.planner.*;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
import org.apache.tajo.util.CommonTestingUtil;
@@ -153,7 +154,7 @@ public class TestHashAntiJoinExec {
FileFragment[] merged = TUtil.concat(empFrags, peopleFrags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testHashAntiJoin");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[0]);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
index 66222da..0e07536 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
@@ -35,6 +35,7 @@ import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.JoinNode;
import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.NodeType;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.master.session.Session;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
@@ -151,7 +152,7 @@ public class TestHashJoinExec {
FileFragment[] merged = TUtil.concat(empFrags, peopleFrags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testHashInnerJoin");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -194,7 +195,7 @@ public class TestHashJoinExec {
FileFragment[] merged = TUtil.concat(empFrags, peopleFrags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testHashInnerJoin");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
index 4e5de98..835260f 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
@@ -32,6 +32,7 @@ import org.apache.tajo.engine.parser.SQLAnalyzer;
import org.apache.tajo.engine.planner.*;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
import org.apache.tajo.util.CommonTestingUtil;
@@ -157,7 +158,7 @@ public class TestHashSemiJoinExec {
FileFragment[] merged = TUtil.concat(empFrags, peopleFrags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testHashSemiJoin");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[0]);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
index de3d298..bb25875 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
@@ -34,6 +34,7 @@ import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.JoinNode;
import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.NodeType;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.master.session.Session;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
@@ -271,7 +272,7 @@ public class TestLeftOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(dep3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuterHashJoinExec0");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
@@ -302,7 +303,7 @@ public class TestLeftOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(job3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuter_HashJoinExec1");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[1]);
@@ -343,7 +344,7 @@ public class TestLeftOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, job3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuter_HashJoinExec2");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[2]);
@@ -385,7 +386,7 @@ public class TestLeftOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, phone3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuter_HashJoinExec3");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[3]);
@@ -427,7 +428,7 @@ public class TestLeftOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(phone3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuter_HashJoinExec4");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[4]);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java
index e806e55..e935f57 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java
@@ -35,6 +35,7 @@ import org.apache.tajo.engine.planner.PhysicalPlannerImpl;
import org.apache.tajo.engine.planner.PlanningException;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.master.session.Session;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
@@ -260,7 +261,7 @@ public class TestLeftOuterNLJoinExec {
FileFragment[] merged = TUtil.concat(dep3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuterNLJoinExec0");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[0]);
@@ -302,7 +303,7 @@ public class TestLeftOuterNLJoinExec {
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuter_NLJoinExec1");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[1]);
@@ -346,7 +347,7 @@ public class TestLeftOuterNLJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, job3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuter_NLJoinExec2");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[2]);
@@ -391,7 +392,7 @@ public class TestLeftOuterNLJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, phone3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuter_NLJoinExec3");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[3]);
@@ -435,7 +436,7 @@ public class TestLeftOuterNLJoinExec {
FileFragment[] merged = TUtil.concat(phone3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestLeftOuter_NLJoinExec4");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[4]);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
index 0e4fd9a..a4449fa 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
@@ -36,6 +36,7 @@ import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.JoinNode;
import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.NodeType;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
import org.apache.tajo.util.CommonTestingUtil;
@@ -165,7 +166,7 @@ public class TestMergeJoinExec {
FileFragment[] merged = TUtil.concat(empFrags, peopleFrags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testMergeInnerJoin");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(enforcer);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
index 120113f..019929d 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
@@ -36,6 +36,7 @@ import org.apache.tajo.engine.planner.PlanningException;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.global.MasterPlan;
import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
import org.apache.tajo.util.CommonTestingUtil;
@@ -151,7 +152,7 @@ public class TestNLJoinExec {
FileFragment[] merged = TUtil.concat(empFrags, peopleFrags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testNLCrossJoin");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[0]);
@@ -180,7 +181,7 @@ public class TestNLJoinExec {
FileFragment[] merged = TUtil.concat(empFrags, peopleFrags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testNLInnerJoin");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[1]);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
index 50a0f44..a823d2b 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
@@ -44,6 +44,7 @@ import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.global.DataChannel;
import org.apache.tajo.engine.planner.global.MasterPlan;
import org.apache.tajo.engine.planner.logical.*;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.ipc.TajoWorkerProtocol;
import org.apache.tajo.master.TajoMaster;
import org.apache.tajo.master.session.Session;
@@ -200,7 +201,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.employee", employee.getMeta(),
employee.getPath(), Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testCreateScanPlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[0]);
@@ -230,7 +232,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.employee", employee.getMeta(),
employee.getPath(), Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testCreateScanWithFilterPlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[16]);
@@ -258,7 +261,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testGroupByPlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[7]);
@@ -289,7 +293,8 @@ public class TestPhysicalPlanner {
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir(
"target/test-data/testHashGroupByPlanWithALLField");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[15]);
@@ -317,7 +322,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testSortGroupByPlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[]{frags[0]}, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[7]);
@@ -376,7 +382,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testStorePlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
ctx.setOutputPath(new Path(workDir, "grouped1"));
@@ -417,7 +424,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testStorePlanWithRCFile");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
ctx.setOutputPath(new Path(workDir, "grouped2"));
@@ -457,7 +465,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testStorePlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
ctx.setOutputPath(new Path(workDir, "grouped3"));
@@ -483,7 +492,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testStorePlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(enforcer);
ctx.setOutputPath(new Path(workDir, "grouped4"));
@@ -506,7 +516,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testStorePlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(enforcer);
ctx.setOutputPath(new Path(workDir, "grouped5"));
@@ -522,7 +533,8 @@ public class TestPhysicalPlanner {
Integer.MAX_VALUE);
QueryUnitAttemptId id = LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testPartitionedStorePlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, id, new FileFragment[] { frags[0] }, workDir);
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ id, new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[7]);
LogicalPlan plan = planner.createPlan(session, context);
@@ -582,7 +594,8 @@ public class TestPhysicalPlanner {
Path workDir = CommonTestingUtil.getTestDir(
"target/test-data/testPartitionedStorePlanWithEmptyGroupingSet");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, id, new FileFragment[] { frags[0] }, workDir);
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ id, new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[14]);
LogicalPlan plan = planner.createPlan(session, expr);
@@ -635,7 +648,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testAggregationFunction");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[8]);
@@ -665,7 +679,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testCountFunction");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[9]);
@@ -692,7 +707,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.score", score.getMeta(), score.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testGroupByWithNullValue");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[11]);
@@ -716,7 +732,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.employee", employee.getMeta(), employee.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testUnionPlan");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(QUERIES[0]);
@@ -743,7 +760,8 @@ public class TestPhysicalPlanner {
@Test
public final void testEvalExpr() throws IOException, PlanningException {
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testEvalExpr");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] { }, workDir);
Expr expr = analyzer.parse(QUERIES[12]);
LogicalPlan plan = planner.createPlan(session, expr);
@@ -779,7 +797,8 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.employee", employee.getMeta(), employee.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testCreateIndex");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] {frags[0]}, workDir);
Expr context = analyzer.parse(createIndexStmt[0]);
LogicalPlan plan = planner.createPlan(session, context);
@@ -806,7 +825,8 @@ public class TestPhysicalPlanner {
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testDuplicateEliminate");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] {frags[0]}, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(duplicateElimination[0]);
@@ -839,7 +859,8 @@ public class TestPhysicalPlanner {
employee.getPath(), Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testIndexedStoreExec");
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] {frags[0]}, workDir);
ctx.setEnforcer(new Enforcer());
Expr context = analyzer.parse(SORT_QUERY[0]);
@@ -940,7 +961,8 @@ public class TestPhysicalPlanner {
Enforcer enforcer = new Enforcer();
enforcer.enforceSortAlgorithm(sortNode.getPID(), SortAlgorithm.IN_MEMORY_SORT);
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] {frags[0]}, workDir);
ctx.setEnforcer(enforcer);
@@ -961,7 +983,8 @@ public class TestPhysicalPlanner {
enforcer = new Enforcer();
enforcer.enforceSortAlgorithm(sortNode.getPID(), SortAlgorithm.MERGE_SORT);
- ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] {frags[0]}, workDir);
ctx.setEnforcer(enforcer);
@@ -988,7 +1011,8 @@ public class TestPhysicalPlanner {
Enforcer enforcer = new Enforcer();
enforcer.enforceHashAggregation(groupByNode.getPID());
- TaskAttemptContext ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] {frags[0]}, workDir);
ctx.setEnforcer(enforcer);
@@ -1009,7 +1033,8 @@ public class TestPhysicalPlanner {
enforcer = new Enforcer();
enforcer.enforceSortAggregation(groupByNode.getPID(), null);
- ctx = new TaskAttemptContext(conf, LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
+ ctx = new TaskAttemptContext(conf, new QueryContext(),
+ LocalTajoTestingUtility.newQueryUnitAttemptId(masterPlan),
new FileFragment[] {frags[0]}, workDir);
ctx.setEnforcer(enforcer);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java
index c60e05c..ed6cb4e 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java
@@ -38,6 +38,7 @@ import org.apache.tajo.engine.planner.PhysicalPlanner;
import org.apache.tajo.engine.planner.PhysicalPlannerImpl;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
import org.apache.tajo.util.CommonTestingUtil;
@@ -138,7 +139,7 @@ public class TestProgressExternalSortExec {
FileFragment[] frags = StorageManager.splitNG(conf, "default.employee", employee.getMeta(), employee.getPath(),
Integer.MAX_VALUE);
Path workDir = new Path(testDir, TestExternalSortExec.class.getName());
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), new FileFragment[] { frags[0] }, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[0]);
http://git-wip-us.apache.org/repos/asf/tajo/blob/300fde0a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
index a45e397..de90f70 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
@@ -35,6 +35,7 @@ import org.apache.tajo.engine.planner.PhysicalPlannerImpl;
import org.apache.tajo.engine.planner.PlanningException;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.master.session.Session;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
@@ -236,7 +237,7 @@ public class TestRightOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, dep3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestRightOuter_HashJoinExec0");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[0]);
@@ -277,7 +278,7 @@ public class TestRightOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(emp3Frags, job3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestRightOuter_HashJoinExec1");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[1]);
@@ -318,7 +319,7 @@ public class TestRightOuterHashJoinExec {
FileFragment[] merged = TUtil.concat(job3Frags, emp3Frags);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/TestRightOuter_HashJoinExec2");
- TaskAttemptContext ctx = new TaskAttemptContext(conf,
+ TaskAttemptContext ctx = new TaskAttemptContext(conf, new QueryContext(),
LocalTajoTestingUtility.newQueryUnitAttemptId(), merged, workDir);
ctx.setEnforcer(new Enforcer());
Expr expr = analyzer.parse(QUERIES[2]);