You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2013/11/30 15:16:13 UTC
[1/7] git commit: TAJO-279: Improving the query_executor page of web
UI. (Wan Heo via jihoon)
Updated Branches:
refs/heads/DAG-execplan 6532324b0 -> 0cbd968ca
TAJO-279: Improving the query_executor page of web UI. (Wan Heo via jihoon)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/87437f17
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/87437f17
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/87437f17
Branch: refs/heads/DAG-execplan
Commit: 87437f1718e5e55ca4eb4517fcb3a00707cbc5a9
Parents: 1f80cd2
Author: Jihoon Son <ji...@apache.org>
Authored: Thu Nov 28 21:27:33 2013 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Thu Nov 28 21:27:33 2013 +0900
----------------------------------------------------------------------
.../tajo/webapp/QueryExecutorServlet.java | 19 ++-
.../webapps/admin/WEB-INF/jetty-web.xml | 23 ++++
.../src/main/resources/webapps/admin/getCSV.jsp | 31 +++++
.../resources/webapps/admin/query_executor.jsp | 131 +++++++++++++++++--
4 files changed, 194 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/87437f17/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java
index c95ff14..d1670c4 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java
@@ -6,6 +6,7 @@ import org.apache.hadoop.util.StringUtils;
import org.apache.tajo.QueryId;
import org.apache.tajo.TajoProtos;
import org.apache.tajo.catalog.TableDesc;
+import org.apache.tajo.catalog.statistics.TableStats;
import org.apache.tajo.client.QueryStatus;
import org.apache.tajo.client.TajoClient;
import org.apache.tajo.conf.TajoConf;
@@ -114,6 +115,11 @@ public class QueryExecutorServlet extends HttpServlet {
}
}
QueryRunner queryRunner = new QueryRunner(queryRunnerId, query);
+ try {
+ queryRunner.sizeLimit = Integer.parseInt(request.getParameter("limitSize"));
+ } catch (java.lang.NumberFormatException nfe) {
+ queryRunner.sizeLimit = 1048576;
+ }
synchronized(queryRunners) {
queryRunners.put(queryRunnerId, queryRunner);
}
@@ -150,6 +156,8 @@ public class QueryExecutorServlet extends HttpServlet {
errorResponse(response, queryRunner.error);
return;
}
+ returnValue.put("numOfRows", queryRunner.numOfRows);
+ returnValue.put("resultSize", queryRunner.resultSize);
returnValue.put("resultData", queryRunner.queryResult);
returnValue.put("resultColumns", queryRunner.columnNames);
returnValue.put("runningTime", JSPUtil.getElapsedTime(queryRunner.startTime, queryRunner.finishTime));
@@ -217,6 +225,9 @@ public class QueryExecutorServlet extends HttpServlet {
AtomicBoolean stop = new AtomicBoolean(false);
QueryId queryId;
String query;
+ long resultSize;
+ int sizeLimit;
+ long numOfRows;
Exception error;
AtomicInteger progress = new AtomicInteger(0);
@@ -311,6 +322,7 @@ public class QueryExecutorServlet extends HttpServlet {
try {
ResultSetMetaData rsmd = res.getMetaData();
TableDesc desc = tajoClient.getResultDesc(tajoQueryId);
+ resultSize = desc.getStats().getNumBytes();
LOG.info("Tajo Query Result: " + desc.getPath() + "\n");
int numOfColumns = rsmd.getColumnCount();
@@ -319,10 +331,15 @@ public class QueryExecutorServlet extends HttpServlet {
}
queryResult = new ArrayList<List<Object>>();
+ if(sizeLimit < resultSize) {
+ numOfRows = (long)((float)(desc.getStats().getNumRows()) * ((float)sizeLimit / (float)resultSize));
+ } else {
+ numOfRows = desc.getStats().getNumRows();
+ }
int rowCount = 0;
boolean hasMoreData = false;
while (res.next()) {
- if(rowCount > 1000) {
+ if(rowCount > numOfRows) {
hasMoreData = true;
break;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/87437f17/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/WEB-INF/jetty-web.xml
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/WEB-INF/jetty-web.xml b/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/WEB-INF/jetty-web.xml
new file mode 100644
index 0000000..7221fbc
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/WEB-INF/jetty-web.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
+ "http://jetty.mortbay.org/configure.dtd">
+<Configure id="WebAppContext" class="org.mortbay.jetty.webapp.WebAppContext">
+ <Set name="maxFormContentSize" type="int">2147483647</Set>
+</Configure>
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/87437f17/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/getCSV.jsp
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/getCSV.jsp b/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/getCSV.jsp
new file mode 100644
index 0000000..f398304
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/getCSV.jsp
@@ -0,0 +1,31 @@
+<%
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+%>
+<%@ page language = "java" contentType = "charset=utf-8" %>
+<%
+ response.setHeader("Content-Type", "application/octet-stream;");
+ response.setHeader("Content-Disposition", "attachment; filename=\"result.csv\";");
+ response.setHeader("Content-Description", "JSP Generated Data");
+ response.setHeader("cache-control", "no-cache");
+ response.setHeader("expires", "0");
+ response.setHeader("pragma", "no-cache");
+ out.print(request.getParameter("csvData"));
+ out.flush();
+%>
+
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/87437f17/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/query_executor.jsp
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/query_executor.jsp b/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/query_executor.jsp
index 21e0309..9e5fa99 100644
--- a/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/query_executor.jsp
+++ b/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/query_executor.jsp
@@ -18,7 +18,6 @@
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-
<%@ page import="java.util.*" %>
<%@ page import="org.apache.tajo.webapp.StaticHttpServer" %>
<%@ page import="org.apache.tajo.master.*" %>
@@ -35,7 +34,6 @@
<link rel="stylesheet" type = "text/css" href = "/static/style.css" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Tajo</title>
-
<style type="text/css">
#progress_bar {
border:1px solid #000000;
@@ -45,13 +43,16 @@
border-radius: 16px;
}
#progress_status {background:#fbcb46; width:0%; height:16px; border-radius: 10px; }
-
</style>
<script src="/static/js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
var progressInterval = 1000;
var progressTimer = null;
var queryRunnerId = null;
+var PRINT_LIMIT = 25;
+var SIZE_LIMIT = 104857600; // Limit size of displayed results.(Bytes)
+var pageNum = 0;
+var pageCount, storedColumns, storedData;
$(document).ready(function() {
$('#btnSubmit').click(function() {
@@ -66,7 +67,16 @@ function init() {
$("#queryResult").html("");
queryRunnerId = null;
}
+
function runQuery() {
+ if(Math.ceil(Number($("#sizeLimit").val())) >= 2048) {
+ SIZE_LIMIT = 2048 * 1024 * 1024 - 1;
+ } else if(Math.ceil(Number($("#sizeLimit").val())) > 0) {
+ SIZE_LIMIT = Number($("#sizeLimit").val()) * 1024 * 1024;
+ }
+ if(Math.ceil(Number($("#printLimit").val())) > 0) {
+ PRINT_LIMIT = Number($("#printLimit").val());
+ }
if(progressTimer != null) {
alert("Already query running.");
return;
@@ -77,7 +87,7 @@ function runQuery() {
$.ajax({
type: "POST",
url: "query_exec",
- data: { action: "runQuery", query: query}
+ data: { action: "runQuery", query: query, limitSize:SIZE_LIMIT }
})
.done(function(msg) {
var resultJson = $.parseJSON(msg);
@@ -139,17 +149,21 @@ function getResult() {
data: { action: "getQueryResult", queryRunnerId: queryRunnerId }
})
.done(function(msg) {
+ var printedLine = 0;
var resultJson = $.parseJSON(msg);
if(resultJson.success == "false") {
alert(resultJson.errorMessage);
$("#queryStatus").html(getQueryStatusHtml(resultJson));
return;
}
- console.log(resultJson);
$("#queryResult").html("");
var resultColumns = resultJson.resultColumns;
var resultData = resultJson.resultData;
-
+
+ storedColumns = resultColumns;
+ storedData = resultData;
+ pageCount = Math.ceil((storedData.length / PRINT_LIMIT)) - 1 ;
+
var resultTable = "<table width='100%' class='border_table'><tr>";
for(var i = 0; i < resultColumns.length; i++) {
resultTable += "<th>" + resultColumns[i] + "</th>";
@@ -160,11 +174,102 @@ function getResult() {
for(var j = 0; j < resultData[i].length; j++) {
resultTable += "<td>" + resultData[i][j] + "</td>";
}
- resultTable += "</tr>";
+ resultTable += "</tr>";
+ if(++printedLine >= PRINT_LIMIT) break;
}
resultTable += "</table>";
$("#queryResult").html(resultTable);
- });
+ $("#queryResultTools").html("");
+ $("#queryResultTools").append("<input type='button' value='Download to CSV' onclick='getCSV();'/> ");
+ $("#queryResultTools").append("<input type='button' value='Prev' onclick='getPrev();'/> ");
+ $("#queryResultTools").append("<input type='button' value='Next' onclick='getNext();'/> ");
+ var selectPage = "<select id='selectPage'>";
+ for(var i = 0; i <= pageCount; i++) {
+ selectPage += "<option value="+i+">"+(i+1)+"</option>";
+ }
+ selectPage += "</select>";
+ $("#queryResultTools").append(selectPage);
+ $("#selectPage").change(getSelectedPage);
+ })
+}
+
+function getCSV() {
+ var csvData = "";
+ var rowCount = storedData.length;
+ var colCount = storedColumns.length;
+ for(var colIndex = 0; colIndex < colCount; colIndex++) {
+ if(colIndex == 0) {
+ csvData += storedColumns[colIndex];
+ } else {
+ csvData += "," + storedColumns[colIndex];
+ }
+ }
+ csvData += "\n";
+ for(var rowIndex=0; rowIndex < rowCount; rowIndex++) {
+ for(var colIndex = 0; colIndex < colCount; colIndex++){
+ if(colIndex == 0) {
+ csvData += storedData[rowIndex][colIndex];
+ } else {
+ csvData += "," + storedData[rowIndex][colIndex];
+ }
+ }
+ csvData += "\n";
+ }
+ $("#csvData").val(csvData);
+ $("#dataForm").submit();
+}
+
+function getNext() {
+ var printedLine = 0;
+ if(pageCount > pageNum) {
+ pageNum++;
+ document.getElementById("selectPage").options.selectedIndex = pageNum;
+ }else {
+ alert("There's no next page.");
+ return;
+ }
+ getPage();
+}
+
+function getPrev() {
+ if(pageNum > 0 ) {
+ pageNum--;
+ document.getElementById("selectPage").options.selectedIndex = pageNum;
+ } else {
+ alert("There's no previous page.");
+ return;
+ }
+ getPage();
+}
+
+function getSelectedPage() {
+ if(pageNum >= 0 && pageNum <= pageCount ) {
+ pageNum = $("#selectPage option:selected").val();
+ } else {
+ alert("Out of range.");
+ return;
+ }
+ getPage();
+}
+
+function getPage() {
+ var printedLine = 0;
+ $("#queryResult").html("");
+ var resultTable = "<table width='100%' class='border_table'><tr>";
+ for(var i = 0; i < storedColumns.length; i++) {
+ resultTable += "<th>" + storedColumns[i] + "</th>";
+ }
+ resultTable += "</tr>";
+ for(var i = pageNum * PRINT_LIMIT; i < storedData.length; i++) {
+ resultTable += "<tr>";
+ for(var j = 0; j < storedData[i].length; j++) {
+ resultTable += "<td>" + storedData[i][j] + "</td>";
+ }
+ resultTable += "</tr>";
+ if(++printedLine >= PRINT_LIMIT) break;
+ }
+ resultTable += "</table>";
+ $("#queryResult").html(resultTable);
}
</script>
@@ -177,7 +282,11 @@ function getResult() {
<hr/>
<h3>Query</h3>
<textarea id="query" style="width:800px; height:250px; font-family:Tahoma; font-size:12px;"></textarea>
- <p/>
+ <p />
+ Limit : <input id="sizeLimit" type="text" value="10" style="width:30px; text-align:center;" /> MB
+ <p />
+ Rows/Page : <input id="printLimit" type="text" value="25" style="width:30px; text-align:center;" />
+ <hr />
<input id="btnSubmit" type="submit" value="Submit">
<hr/>
<div>
@@ -197,6 +306,10 @@ function getResult() {
<hr/>
<h3>Query Result</h3>
<div id="queryResult"></div>
+ <hr/>
+ <div id="queryResultTools"></div>
+ <hr/>
+ <div style="dispaly:none;"><form name="dataForm" id="dataForm" method="post" action="getCSV.jsp"><input type="hidden" id="csvData" name="csvData" value="" /></div>
</div>
</body>
</html>
[3/7] git commit: TAJO-341: Implement substr function. (hyoungjunkim
via hyunsik)
Posted by ji...@apache.org.
TAJO-341: Implement substr function. (hyoungjunkim via hyunsik)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/f9a6e9ca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/f9a6e9ca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/f9a6e9ca
Branch: refs/heads/DAG-execplan
Commit: f9a6e9ca3dbfc7c518ad6f0d3b1c9fe3196b654e
Parents: 2e27a02
Author: Hyunsik Choi <hy...@apache.org>
Authored: Sat Nov 30 14:49:53 2013 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Sat Nov 30 14:49:53 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 2 +
.../tajo/engine/function/string/Substr.java | 75 ++++++++++++++++++++
.../java/org/apache/tajo/master/TajoMaster.java | 5 ++
.../TestStringOperatorsAndFunctions.java | 32 +++++++++
4 files changed, 114 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/f9a6e9ca/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 3cee24e..0242e99 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -4,6 +4,8 @@ Release 0.8.0 - unreleased
NEW FEATURES
+ TAJO-341: Implement substr function. (hyoungjunkim via hyunsik)
+
TAJO-308: Implement length(string) function. (hyoungjunkim via hyunsik)
TAJO-200: RCFile compatible to apache hive. (jinho)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/f9a6e9ca/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
new file mode 100644
index 0000000..cb42e3c
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
@@ -0,0 +1,75 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.engine.function.string;
+
+import org.apache.tajo.catalog.Column;
+import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.datum.DatumFactory;
+import org.apache.tajo.datum.NullDatum;
+import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.storage.Tuple;
+
+/**
+ * Function definition
+ *
+ * text substr(string text, from int4 [, length int4])
+ */
+public class Substr extends GeneralFunction {
+ public Substr() {
+ super(new Column[] {
+ new Column("text", TajoDataTypes.Type.TEXT),
+ new Column("from", TajoDataTypes.Type.INT4),
+ new Column("length", TajoDataTypes.Type.INT4) //optional
+ });
+ }
+
+ @Override
+ public Datum eval(Tuple params) {
+ Datum valueDatum = params.get(0);
+ if(valueDatum instanceof NullDatum) {
+ return NullDatum.get();
+ }
+ Datum fromDatum = params.get(1);
+ Datum lengthDatum = params.size() > 2 ? params.get(2) : null;
+
+ String value = valueDatum.asChars();
+ int valueLength = value.length();
+
+ int from = fromDatum.asInt4() - 1;
+ if (from >= valueLength) {
+ return DatumFactory.createText("");
+ }
+
+ int length = (lengthDatum == null) ? valueLength : lengthDatum.asInt4();
+
+ if (from < 0) {
+ from = 0;
+ length = (lengthDatum == null) ? value.length() : length - 1;
+ }
+
+ int to = from + length;
+
+ if (to > valueLength) {
+ to = valueLength;
+ }
+
+ return DatumFactory.createText(value.substring(from, to));
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/f9a6e9ca/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java
index b634f25..f91cc0b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java
@@ -399,6 +399,11 @@ public class TajoMaster extends CompositeService {
CatalogUtil.newSimpleDataType(Type.INT4),
CatalogUtil.newSimpleDataTypeArray(Type.TEXT)));
+ sqlFuncs.add(
+ new FunctionDesc("substr", Substr.class, FunctionType.GENERAL,
+ CatalogUtil.newSimpleDataType(Type.TEXT),
+ CatalogUtil.newSimpleDataTypeArray(Type.TEXT, Type.INT4, Type.INT4)));
+
return sqlFuncs;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/f9a6e9ca/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
index 5124173..5e73f88 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
@@ -190,4 +190,36 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
testEval(schema, "table1", "ABC,DEF,3.14", "select length(lower(col1) || lower(col2)) from table1",
new String[]{"6"});
}
+
+ @Test
+ public void testSubstr() throws IOException {
+ testSimpleEval("select substr('abcdef', 3, 2) as col1 ", new String[]{"cd"});
+ testSimpleEval("select substr('abcdef', 3) as col1 ", new String[]{"cdef"});
+ testSimpleEval("select substr('abcdef', 1, 1) as col1 ", new String[]{"a"});
+ testSimpleEval("select substr('abcdef', 0, 1) as col1 ", new String[]{""});
+ testSimpleEval("select substr('abcdef', 0, 2) as col1 ", new String[]{"a"});
+ testSimpleEval("select substr('abcdef', 0) as col1 ", new String[]{"abcdef"});
+ testSimpleEval("select substr('abcdef', 1, 100) as col1 ", new String[]{"abcdef"});
+ testSimpleEval("select substr('abcdef', 0, 100) as col1 ", new String[]{"abcdef"});
+ testSimpleEval("select substr('일이삼사오', 2, 2) as col1 ", new String[]{"이삼"});
+ testSimpleEval("select substr('일이삼사오', 3) as col1 ", new String[]{"삼사오"});
+
+ //TODO If there is a minus value in function argument, next error occurred.
+ //org.apache.tajo.engine.parser.SQLSyntaxError: ERROR: syntax error at or near 'substr'
+ //LINE 1:7 select substr('abcdef', -1, 100) as col1
+ // ^^^^^^
+ //at org.apache.tajo.engine.parser.SQLAnalyzer.parse(SQLAnalyzer.java:64)
+
+// testSimpleEval("select substr('abcdef', -1) as col1 ", new String[]{"abcdef"});
+// testSimpleEval("select substr('abcdef', -1, 100) as col1 ", new String[]{"abcdef"});
+// testSimpleEval("select substr('abcdef', -1, 3) as col1 ", new String[]{"a"});
+// testSimpleEval("select substr('abcdef', -1, 1) as col1 ", new String[]{""});
+
+ Schema schema = new Schema();
+ schema.addColumn("col1", TEXT);
+ schema.addColumn("col2", TEXT);
+ schema.addColumn("col3", TEXT);
+ testEval(schema, "table1", ",abcdef,3.14", "select substr(lower(col2), 2, 3) from table1",
+ new String[]{"bcd"});
+ }
}
[5/7] git commit: TAJO-345: MergeScanner should support projectable
storages. (jihoon)
Posted by ji...@apache.org.
TAJO-345: MergeScanner should support projectable storages. (jihoon)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/1191003e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/1191003e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/1191003e
Branch: refs/heads/DAG-execplan
Commit: 1191003ef2f20acdfa84490eb314a0e8c5d510de
Parents: a26c588
Author: Jihoon Son <ji...@apache.org>
Authored: Sat Nov 30 23:02:00 2013 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Sat Nov 30 23:02:00 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 2 +
.../engine/planner/physical/SeqScanExec.java | 2 +-
.../org/apache/tajo/storage/MergeScanner.java | 49 ++++++++++++++------
.../apache/tajo/storage/TestMergeScanner.java | 33 +++++++++++--
4 files changed, 66 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1191003e/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 0242e99..e647794 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -50,6 +50,8 @@ Release 0.8.0 - unreleased
BUG FIXES
+ TAJO-345: MergeScanner should support projectable storages. (jihoon)
+
TAJO-290: TajoDataType.Type.NULL should be NULL_TYPE. (DaeMyung Kang via jinho)
TAJO-332: Invalid row count of CSVScanner. (jinho)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1191003e/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
index 22af472..5783080 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
@@ -92,7 +92,7 @@ public class SeqScanExec extends PhysicalExec {
if (fragments.length > 1) {
this.scanner = new MergeScanner(context.getConf(), plan.getTableSchema(), plan.getTableDesc().getMeta(),
FragmentConvertor.<FileFragment>convert(context.getConf(), plan.getTableDesc().getMeta().getStoreType(),
- fragments));
+ fragments), projected);
} else {
this.scanner = StorageManagerFactory.getStorageManager(
context.getConf()).getScanner(plan.getTableDesc().getMeta(), plan.getTableSchema(), fragments[0], projected);
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1191003e/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/MergeScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/MergeScanner.java b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/MergeScanner.java
index 2caa737..7082005 100644
--- a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/MergeScanner.java
+++ b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/MergeScanner.java
@@ -23,11 +23,9 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.storage.fragment.FileFragment;
import org.apache.tajo.storage.fragment.Fragment;
-import org.apache.tajo.storage.fragment.FragmentConvertor;
import java.io.IOException;
import java.util.Collection;
@@ -43,9 +41,18 @@ public class MergeScanner implements Scanner {
private FileFragment currentFragment;
private Scanner currentScanner;
private Tuple tuple;
+ private boolean projectable = false;
+ private boolean selectable = false;
+ private Schema target;
public MergeScanner(Configuration conf, Schema schema, TableMeta meta, Collection<FileFragment> rawFragmentList)
throws IOException {
+ this(conf, schema, meta, rawFragmentList, schema);
+ }
+
+ public MergeScanner(Configuration conf, Schema schema, TableMeta meta, Collection<FileFragment> rawFragmentList,
+ Schema target)
+ throws IOException {
this.conf = conf;
this.schema = schema;
this.meta = meta;
@@ -54,7 +61,12 @@ public class MergeScanner implements Scanner {
fragments.add((FileFragment) f);
}
- iterator = this.fragments.iterator();
+ this.target = target;
+ this.reset();
+ if (currentScanner != null) {
+ this.projectable = currentScanner.isProjectable();
+ this.selectable = currentScanner.isSelectable();
+ }
}
@Override
@@ -68,27 +80,33 @@ public class MergeScanner implements Scanner {
if (tuple != null) {
return tuple;
- } else if (iterator.hasNext()) {
+ } else {
if (currentScanner != null) {
currentScanner.close();
}
- currentFragment = iterator.next();
- currentScanner = StorageManagerFactory.getStorageManager((TajoConf)conf).getScanner(meta, schema,
- currentFragment);
- currentScanner.init();
- return currentScanner.next();
- } else {
- return null;
+ currentScanner = getNextScanner();
+ if (currentScanner != null) {
+ tuple = currentScanner.next();
+ }
}
+ return tuple;
}
@Override
public void reset() throws IOException {
- iterator = fragments.iterator();
+ this.iterator = fragments.iterator();
+ this.currentScanner = getNextScanner();
+ }
+
+ private Scanner getNextScanner() throws IOException {
if (iterator.hasNext()) {
currentFragment = iterator.next();
currentScanner = StorageManagerFactory.getStorageManager((TajoConf)conf).getScanner(meta, schema,
- currentFragment);
+ currentFragment, target);
+ currentScanner.init();
+ return currentScanner;
+ } else {
+ return null;
}
}
@@ -105,16 +123,17 @@ public class MergeScanner implements Scanner {
@Override
public boolean isProjectable() {
- return false;
+ return projectable;
}
@Override
public void setTarget(Column[] targets) {
+ this.target = new Schema(targets);
}
@Override
public boolean isSelectable() {
- return false;
+ return selectable;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1191003e/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestMergeScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestMergeScanner.java b/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestMergeScanner.java
index 18dcb2e..f2a66d9 100644
--- a/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestMergeScanner.java
+++ b/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestMergeScanner.java
@@ -44,7 +44,7 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
@RunWith(Parameterized.class)
public class TestMergeScanner {
@@ -76,6 +76,7 @@ public class TestMergeScanner {
public void setup() throws Exception {
conf = new TajoConf();
conf.setVar(ConfVars.ROOT_DIR, TEST_PATH);
+ conf.setStrings("tajo.storage.projectable-scanner", "rcfile", "trevni");
testDir = CommonTestingUtil.getTestDir(TEST_PATH);
fs = testDir.getFileSystem(conf);
sm = StorageManagerFactory.getStorageManager(conf, testDir);
@@ -140,15 +141,39 @@ public class TestMergeScanner {
FileFragment[] fragment = new FileFragment[2];
fragment[0] = new FileFragment("tablet1", table1Path, 0, status1.getLen());
fragment[1] = new FileFragment("tablet1", table2Path, 0, status2.getLen());
-
- Scanner scanner = new MergeScanner(conf, schema, meta, TUtil.<FileFragment>newList(fragment));
+
+ Schema targetSchema = new Schema();
+ targetSchema.addColumn(schema.getColumn(0));
+ targetSchema.addColumn(schema.getColumn(2));
+
+ Scanner scanner = new MergeScanner(conf, schema, meta, TUtil.<FileFragment>newList(fragment), targetSchema);
+ assertEquals(isProjectableStorage(meta.getStoreType()), scanner.isProjectable());
+
scanner.init();
int totalCounts = 0;
- while (scanner.next() != null) {
+ Tuple tuple;
+ while ((tuple=scanner.next()) != null) {
totalCounts++;
+ if (isProjectableStorage(meta.getStoreType())) {
+ assertNotNull(tuple.get(0));
+ assertNull(tuple.get(1));
+ assertNotNull(tuple.get(2));
+ assertNull(tuple.get(3));
+ }
}
scanner.close();
assertEquals(tupleNum * 2, totalCounts);
}
+
+ private static boolean isProjectableStorage(StoreType type) {
+ switch (type) {
+ case RCFILE:
+ case TREVNI:
+ case CSV:
+ return true;
+ default:
+ return false;
+ }
+ }
}
\ No newline at end of file
[2/7] git commit: TAJO-290: TajoDataType.Type.NULL should be
NULL_TYPE. (DaeMyung Kang via jinho)
Posted by ji...@apache.org.
TAJO-290: TajoDataType.Type.NULL should be NULL_TYPE. (DaeMyung Kang via jinho)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/2e27a023
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/2e27a023
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/2e27a023
Branch: refs/heads/DAG-execplan
Commit: 2e27a0232ac1bf48fe277a22a818d282866216c7
Parents: 87437f1
Author: jinossy <ji...@gmail.com>
Authored: Fri Nov 29 11:29:18 2013 +0900
Committer: jinossy <ji...@gmail.com>
Committed: Fri Nov 29 11:29:18 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 2 ++
.../java/org/apache/tajo/datum/CharDatum.java | 4 ++--
.../org/apache/tajo/datum/DatumFactory.java | 2 +-
.../java/org/apache/tajo/datum/Float4Datum.java | 14 +++++++-------
.../java/org/apache/tajo/datum/Float8Datum.java | 14 +++++++-------
.../java/org/apache/tajo/datum/Int2Datum.java | 20 +++++++++-----------
.../java/org/apache/tajo/datum/Int4Datum.java | 14 +++++++-------
.../java/org/apache/tajo/datum/Int8Datum.java | 14 +++++++-------
.../java/org/apache/tajo/datum/NullDatum.java | 2 +-
.../java/org/apache/tajo/datum/TextDatum.java | 4 ++--
tajo-common/src/main/proto/DataTypes.proto | 4 ++--
.../apache/tajo/engine/eval/FunctionEval.java | 2 +-
.../org/apache/tajo/engine/eval/IsNullEval.java | 4 +---
.../storage/BinarySerializeDeserialize.java | 2 +-
.../java/org/apache/tajo/storage/RawFile.java | 4 ++--
.../java/org/apache/tajo/storage/RowFile.java | 2 +-
.../tajo/storage/TextSerializeDeserialize.java | 2 +-
.../tajo/storage/trevni/TrevniAppender.java | 4 ++--
.../tajo/storage/trevni/TrevniScanner.java | 2 +-
.../org/apache/tajo/storage/TestLazyTuple.java | 2 +-
.../org/apache/tajo/storage/TestStorages.java | 6 +++---
.../apache/tajo/storage/v2/TestStorages.java | 2 +-
22 files changed, 62 insertions(+), 64 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 0a7dd47..3cee24e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -48,6 +48,8 @@ Release 0.8.0 - unreleased
BUG FIXES
+ TAJO-290: TajoDataType.Type.NULL should be NULL_TYPE. (DaeMyung Kang via jinho)
+
TAJO-332: Invalid row count of CSVScanner. (jinho)
TAJO-326: In ExecutionBlock, isRoot() and isLeafBlock() return invalid values. (jihoon)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java
index 651b00b..94bafb1 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java
@@ -139,7 +139,7 @@ public class CharDatum extends Datum {
case CHAR:
return DatumFactory.createBool(this.equals(datum));
- case NULL:
+ case NULL_TYPE:
return DatumFactory.createBool(false);
default:
@@ -154,7 +154,7 @@ public class CharDatum extends Datum {
CharDatum other = (CharDatum) datum;
return UnsignedBytes.lexicographicalComparator().compare(bytes, other.bytes);
- case NULL:
+ case NULL_TYPE:
return -1;
default:
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java b/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
index b0aa9ca..2ce02d4 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
@@ -54,7 +54,7 @@ public class DatumFactory {
return Inet4Datum.class;
case ANY:
return NullDatum.class;
- case NULL:
+ case NULL_TYPE:
return NullDatum.class;
default:
throw new UnsupportedOperationException(type.name());
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
index 8de20ee..990b6a4 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
@@ -134,7 +134,7 @@ public class Float4Datum extends Datum implements NumericDatum {
return DatumFactory.createBool(val == datum.asFloat4());
case FLOAT8:
return DatumFactory.createBool(val == datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return DatumFactory.createBool(false);
default:
throw new InvalidOperationException();
@@ -194,7 +194,7 @@ public class Float4Datum extends Datum implements NumericDatum {
return 0;
}
}
- case NULL:
+ case NULL_TYPE:
return -1;
default:
throw new InvalidOperationException();
@@ -214,7 +214,7 @@ public class Float4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val + datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -234,7 +234,7 @@ public class Float4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val - datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -254,7 +254,7 @@ public class Float4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val * datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val * datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException();
@@ -274,7 +274,7 @@ public class Float4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val / datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val / datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -294,7 +294,7 @@ public class Float4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val / datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val / datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
index 1857929..bb49e28 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
@@ -132,7 +132,7 @@ public class Float8Datum extends Datum implements NumericDatum {
return DatumFactory.createBool(val == datum.asFloat4());
case FLOAT8:
return DatumFactory.createBool(val == datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return DatumFactory.createBool(false);
default:
throw new InvalidOperationException();
@@ -192,7 +192,7 @@ public class Float8Datum extends Datum implements NumericDatum {
return 0;
}
}
- case NULL:
+ case NULL_TYPE:
return -1;
default:
throw new InvalidOperationException();
@@ -212,7 +212,7 @@ public class Float8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val + datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -232,7 +232,7 @@ public class Float8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val - datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -252,7 +252,7 @@ public class Float8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val * datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val * datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException();
@@ -272,7 +272,7 @@ public class Float8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val / datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val / datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -292,7 +292,7 @@ public class Float8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val % datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val % datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
index 000a107..bee8c47 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
@@ -19,6 +19,8 @@
package org.apache.tajo.datum;
import com.google.gson.annotations.Expose;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.exception.InvalidOperationException;
import org.apache.tajo.util.NumberUtil;
@@ -26,10 +28,6 @@ import org.apache.tajo.util.NumberUtil;
import java.nio.ByteBuffer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
public class Int2Datum extends Datum implements NumericDatum {
private static final int size = 2;
@Expose private short val;
@@ -131,7 +129,7 @@ public class Int2Datum extends Datum implements NumericDatum {
return DatumFactory.createBool(val == datum.asFloat4());
case FLOAT8:
return DatumFactory.createBool(val == datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return DatumFactory.createBool(false);
default:
throw new InvalidOperationException();
@@ -191,7 +189,7 @@ public class Int2Datum extends Datum implements NumericDatum {
return 0;
}
}
- case NULL:
+ case NULL_TYPE:
return -1;
default:
throw new InvalidOperationException();
@@ -211,7 +209,7 @@ public class Int2Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val + datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -231,7 +229,7 @@ public class Int2Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val - datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -251,7 +249,7 @@ public class Int2Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val * datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val * datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -271,7 +269,7 @@ public class Int2Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val / datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val / datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -291,7 +289,7 @@ public class Int2Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val % datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val % datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
index a68a5f1..ee66700 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
@@ -129,7 +129,7 @@ public class Int4Datum extends Datum implements NumericDatum {
return DatumFactory.createBool(val == datum.asFloat4());
case FLOAT8:
return DatumFactory.createBool(val == datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return DatumFactory.createBool(false);
default:
throw new InvalidOperationException();
@@ -189,7 +189,7 @@ public class Int4Datum extends Datum implements NumericDatum {
return 0;
}
}
- case NULL:
+ case NULL_TYPE:
return -1;
default:
throw new InvalidOperationException();
@@ -209,7 +209,7 @@ public class Int4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val + datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -229,7 +229,7 @@ public class Int4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val - datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -249,7 +249,7 @@ public class Int4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val * datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val * datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException();
@@ -269,7 +269,7 @@ public class Int4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val / datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val / datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -289,7 +289,7 @@ public class Int4Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat4(val % datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val % datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
index 985ecd6..a1664c5 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
@@ -136,7 +136,7 @@ public class Int8Datum extends Datum implements NumericDatum {
return DatumFactory.createBool(val == datum.asFloat4());
case FLOAT8:
return DatumFactory.createBool(val == datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return DatumFactory.createBool(false);
default:
throw new InvalidOperationException();
@@ -196,7 +196,7 @@ public class Int8Datum extends Datum implements NumericDatum {
return 0;
}
}
- case NULL:
+ case NULL_TYPE:
return -1;
default:
throw new InvalidOperationException();
@@ -216,7 +216,7 @@ public class Int8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val + datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -236,7 +236,7 @@ public class Int8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val - datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -256,7 +256,7 @@ public class Int8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val * datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val * datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -276,7 +276,7 @@ public class Int8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val / datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val / datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
@@ -296,7 +296,7 @@ public class Int8Datum extends Datum implements NumericDatum {
return DatumFactory.createFloat8(val % datum.asFloat4());
case FLOAT8:
return DatumFactory.createFloat8(val % datum.asFloat8());
- case NULL:
+ case NULL_TYPE:
return datum;
default:
throw new InvalidOperationException(datum.type());
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java
index 2cce626..6a18ef3 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java
@@ -28,7 +28,7 @@ public class NullDatum extends Datum {
}
private NullDatum() {
- super(Type.NULL);
+ super(Type.NULL_TYPE);
}
public static NullDatum get() {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java
index 76cdc57..779d5ea 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java
@@ -106,7 +106,7 @@ public class TextDatum extends Datum {
case BLOB:
return UnsignedBytes.lexicographicalComparator().compare(bytes, datum.asByteArray());
- case NULL:
+ case NULL_TYPE:
return -1;
default:
throw new InvalidOperationException();
@@ -131,7 +131,7 @@ public class TextDatum extends Datum {
case BLOB:
return DatumFactory.createBool(UnsignedBytes.lexicographicalComparator()
.compare(bytes, datum.asByteArray()) == 0);
- case NULL:
+ case NULL_TYPE:
return DatumFactory.createBool(false);
default:
throw new InvalidOperationException();
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-common/src/main/proto/DataTypes.proto
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/proto/DataTypes.proto b/tajo-common/src/main/proto/DataTypes.proto
index 0eacdd6..9b5b98f 100644
--- a/tajo-common/src/main/proto/DataTypes.proto
+++ b/tajo-common/src/main/proto/DataTypes.proto
@@ -23,7 +23,7 @@ option java_generic_services = false;
option java_generate_equals_and_hash = true;
enum Type {
- NULL = 0; // NULL type
+ NULL_TYPE = 0; // NULL type
BOOLEAN = 1; // state of true of false [1 byte]
@@ -102,4 +102,4 @@ message DataType {
required Type type = 1;
optional int32 length = 2;
optional string code = 3;
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FunctionEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FunctionEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FunctionEval.java
index df26692..c4906d7 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FunctionEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FunctionEval.java
@@ -49,7 +49,7 @@ public abstract class FunctionEval extends EvalNode implements Cloneable {
ParamType [] paramTypes = new ParamType[argEvals.length];
for (int i = 0; i < argEvals.length; i++) {
if (argEvals[i].getType() == EvalType.CONST) {
- if (argEvals[i].getValueType().getType() == TajoDataTypes.Type.NULL) {
+ if (argEvals[i].getValueType().getType() == TajoDataTypes.Type.NULL_TYPE) {
paramTypes[i] = ParamType.NULL;
} else {
paramTypes[i] = ParamType.CONSTANT;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/IsNullEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/IsNullEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/IsNullEval.java
index 3923a4f..029f4f4 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/IsNullEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/IsNullEval.java
@@ -20,14 +20,12 @@ package org.apache.tajo.engine.eval;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.BooleanDatum;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
-import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.storage.Tuple;
public class IsNullEval extends BinaryEval {
@@ -65,7 +63,7 @@ public class IsNullEval extends BinaryEval {
IsNullEvalCtx isNullCtx = (IsNullEvalCtx) ctx;
leftExpr.eval(isNullCtx.predicandContext, schema, tuple);
Datum result = leftExpr.terminate(((IsNullEvalCtx)ctx).predicandContext);
- ((IsNullEvalCtx) ctx).result = DatumFactory.createBool(isNot ^ (result.type() == TajoDataTypes.Type.NULL));
+ ((IsNullEvalCtx) ctx).result = DatumFactory.createBool(isNot ^ (result.type() == TajoDataTypes.Type.NULL_TYPE));
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/BinarySerializeDeserialize.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/BinarySerializeDeserialize.java b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/BinarySerializeDeserialize.java
index f1da79b..4c3b6ff 100644
--- a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/BinarySerializeDeserialize.java
+++ b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/BinarySerializeDeserialize.java
@@ -86,7 +86,7 @@ public class BinarySerializeDeserialize implements SerializeDeserialize {
length = bytes.length;
out.write(bytes, 0, length);
break;
- case NULL:
+ case NULL_TYPE:
default:
break;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RawFile.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RawFile.java b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RawFile.java
index a484643..88a4005 100644
--- a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RawFile.java
+++ b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RawFile.java
@@ -231,7 +231,7 @@ public class RawFile {
tuple.put(i, DatumFactory.createInet4(ipv4Bytes));
break;
- case NULL:
+ case NULL_TYPE:
tuple.put(i, NullDatum.get());
break;
@@ -402,7 +402,7 @@ public class RawFile {
}
switch(columnTypes[i].getType()) {
- case NULL:
+ case NULL_TYPE:
nullFlags.set(i);
continue;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RowFile.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RowFile.java b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RowFile.java
index d805080..bbe0529 100644
--- a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RowFile.java
+++ b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RowFile.java
@@ -436,7 +436,7 @@ public class RowFile {
break;
case INET6:
buffer.put(t.getIPv6Bytes(i));
- case NULL:
+ case NULL_TYPE:
nullFlags.set(i);
break;
default:
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/TextSerializeDeserialize.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/TextSerializeDeserialize.java b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/TextSerializeDeserialize.java
index 64b078c..67fb8b8 100644
--- a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/TextSerializeDeserialize.java
+++ b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/TextSerializeDeserialize.java
@@ -92,7 +92,7 @@ public class TextSerializeDeserialize implements SerializeDeserialize {
length = protoBytes.length;
out.write(protoBytes, 0, protoBytes.length);
break;
- case NULL:
+ case NULL_TYPE:
default:
break;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java
index 9de3397..3209469 100644
--- a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java
+++ b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java
@@ -111,7 +111,7 @@ public class TrevniAppender extends FileAppender {
return ValueType.BYTES;
case PROTOBUF:
return ValueType.BYTES;
- case NULL:
+ case NULL_TYPE:
return ValueType.NULL;
default:
return null;
@@ -135,7 +135,7 @@ public class TrevniAppender extends FileAppender {
if (!t.isNull(i)) {
col = schema.getColumn(i);
switch (col.getDataType().getType()) {
- case NULL:
+ case NULL_TYPE:
break;
case BOOLEAN:
case BIT:
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java
index d1980e4..4165afe 100644
--- a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java
+++ b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java
@@ -152,7 +152,7 @@ public class TrevniScanner extends FileScanner {
new BlobDatum(((ByteBuffer) columns[i].nextValue())));
break;
- case NULL:
+ case NULL_TYPE:
tuple.put(tid, NullDatum.get());
break;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java b/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
index b67ea92..4cb0b34 100644
--- a/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
+++ b/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
@@ -52,7 +52,7 @@ public class TestLazyTuple {
schema.addColumn("col10", TajoDataTypes.Type.BLOB);
schema.addColumn("col11", TajoDataTypes.Type.INET4);
schema.addColumn("col12", TajoDataTypes.Type.INT4);
- schema.addColumn("col13", TajoDataTypes.Type.NULL);
+ schema.addColumn("col13", TajoDataTypes.Type.NULL_TYPE);
StringBuilder sb = new StringBuilder();
sb.append(DatumFactory.createBool(true)).append('|');
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestStorages.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestStorages.java b/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestStorages.java
index 5c2cd8f..2faae7f 100644
--- a/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestStorages.java
+++ b/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/TestStorages.java
@@ -201,7 +201,7 @@ public class TestStorages {
schema.addColumn("col9", Type.TEXT);
schema.addColumn("col10", Type.BLOB);
schema.addColumn("col11", Type.INET4);
- schema.addColumn("col12", Type.NULL);
+ schema.addColumn("col12", Type.NULL_TYPE);
schema.addColumn("col13", CatalogUtil.newDataType(Type.PROTOBUF, TajoIdProtos.QueryIdProto.class.getName()));
Options options = new Options();
@@ -263,7 +263,7 @@ public class TestStorages {
schema.addColumn("col9", Type.TEXT);
schema.addColumn("col10", Type.BLOB);
schema.addColumn("col11", Type.INET4);
- schema.addColumn("col12", Type.NULL);
+ schema.addColumn("col12", Type.NULL_TYPE);
schema.addColumn("col13", CatalogUtil.newDataType(Type.PROTOBUF, TajoIdProtos.QueryIdProto.class.getName()));
Options options = new Options();
@@ -326,7 +326,7 @@ public class TestStorages {
schema.addColumn("col9", Type.TEXT);
schema.addColumn("col10", Type.BLOB);
schema.addColumn("col11", Type.INET4);
- schema.addColumn("col12", Type.NULL);
+ schema.addColumn("col12", Type.NULL_TYPE);
schema.addColumn("col13", CatalogUtil.newDataType(Type.PROTOBUF, TajoIdProtos.QueryIdProto.class.getName()));
Options options = new Options();
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/2e27a023/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/v2/TestStorages.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/v2/TestStorages.java b/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/v2/TestStorages.java
index 34781bf..a3d3133 100644
--- a/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/v2/TestStorages.java
+++ b/tajo-core/tajo-core-storage/src/test/java/org/apache/tajo/storage/v2/TestStorages.java
@@ -199,7 +199,7 @@ public class TestStorages {
schema.addColumn("col9", Type.TEXT);
schema.addColumn("col10", Type.BLOB);
schema.addColumn("col11", Type.INET4);
- schema.addColumn("col12", Type.NULL);
+ schema.addColumn("col12", Type.NULL_TYPE);
Options options = new Options();
TableMeta meta = CatalogUtil.newTableMeta(storeType, options);
[4/7] git commit: TAJO-207: Implement bit_length(string) function.
(DaeMyung Kang via jihoon)
Posted by ji...@apache.org.
TAJO-207: Implement bit_length(string) function. (DaeMyung Kang via jihoon)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/a26c588e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/a26c588e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/a26c588e
Branch: refs/heads/DAG-execplan
Commit: a26c588e31c54e791cbb45f7d5bf1336d0c72da6
Parents: f9a6e9c
Author: Jihoon Son <ji...@apache.org>
Authored: Sat Nov 30 20:56:05 2013 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Sat Nov 30 20:56:05 2013 +0900
----------------------------------------------------------------------
.../tajo/engine/function/string/BitLength.java | 48 ++++++++++++++++++++
.../java/org/apache/tajo/master/TajoMaster.java | 7 ++-
.../TestStringOperatorsAndFunctions.java | 12 +++++
3 files changed, 65 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/a26c588e/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BitLength.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
new file mode 100644
index 0000000..3a84f5b
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.engine.function.string;
+
+import org.apache.tajo.catalog.Column;
+import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.datum.DatumFactory;
+import org.apache.tajo.datum.NullDatum;
+import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.storage.Tuple;
+
+/**
+ * Function definition
+ *
+ * INT4 bit_length(string text)
+ */
+public class BitLength extends GeneralFunction {
+ public BitLength() {
+ super(new Column[] {
+ new Column("text", TajoDataTypes.Type.TEXT)
+ });
+ }
+
+ @Override
+ public Datum eval(Tuple params) {
+ Datum datum = params.get(0);
+ if(datum instanceof NullDatum) return NullDatum.get();
+
+ return DatumFactory.createInt4(datum.asByteArray().length*8);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/a26c588e/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java
index f91cc0b..1c823d3 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TajoMaster.java
@@ -352,7 +352,10 @@ public class TajoMaster extends CompositeService {
new FunctionDesc("character_length", CharLength.class, FunctionType.GENERAL,
CatalogUtil.newSimpleDataType(Type.TEXT),
CatalogUtil.newSimpleDataTypeArray(Type.TEXT)));
-
+ sqlFuncs.add(
+ new FunctionDesc("bit_length", BitLength.class, FunctionType.GENERAL,
+ CatalogUtil.newSimpleDataType(Type.TEXT),
+ CatalogUtil.newSimpleDataTypeArray(Type.TEXT)));
sqlFuncs.add(
new FunctionDesc("split_part", SplitPart.class, FunctionType.GENERAL,
CatalogUtil.newSimpleDataType(Type.TEXT),
@@ -617,4 +620,4 @@ public class TajoMaster extends CompositeService {
System.exit(-1);
}
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/a26c588e/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
index 5e73f88..27b9355 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
@@ -222,4 +222,16 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
testEval(schema, "table1", ",abcdef,3.14", "select substr(lower(col2), 2, 3) from table1",
new String[]{"bcd"});
}
+
+ @Test
+ public void testBitLength() throws IOException {
+ testSimpleEval("select bit_length('123456') as col1 ", new String[]{"48"});
+
+ Schema schema = new Schema();
+ schema.addColumn("col1", TEXT);
+ schema.addColumn("col2", TEXT);
+ schema.addColumn("col3", TEXT);
+ testEval(schema, "table1", "ABC,DEF,3.14", "select bit_length(lower(col1) || lower(col2)) from table1",
+ new String[]{"48"});
+ }
}
[6/7] git commit: TAJO-207: Implement bit_length(string) function.
(fixed a missing log in CHANGES.txt)
Posted by ji...@apache.org.
TAJO-207: Implement bit_length(string) function. (fixed a missing log in CHANGES.txt)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/02fd6cb9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/02fd6cb9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/02fd6cb9
Branch: refs/heads/DAG-execplan
Commit: 02fd6cb9ab7664760d5549c8e59def0759118e6c
Parents: 1191003
Author: Jihoon Son <ji...@apache.org>
Authored: Sat Nov 30 23:12:57 2013 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Sat Nov 30 23:12:57 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/02fd6cb9/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e647794..cd6e9f8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -4,6 +4,8 @@ Release 0.8.0 - unreleased
NEW FEATURES
+ TAJO-207: Implement bit_length(string) function. (DaeMyung Kang via jihoon)
+
TAJO-341: Implement substr function. (hyoungjunkim via hyunsik)
TAJO-308: Implement length(string) function. (hyoungjunkim via hyunsik)
[7/7] git commit: Merge branch 'master' of
http://git-wip-us.apache.org/repos/asf/incubator-tajo into DAG-execplan
Posted by ji...@apache.org.
Merge branch 'master' of http://git-wip-us.apache.org/repos/asf/incubator-tajo into DAG-execplan
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/0cbd968c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/0cbd968c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/0cbd968c
Branch: refs/heads/DAG-execplan
Commit: 0cbd968ca50c1c91efa1fce9be5ddc927b02b3b7
Parents: 6532324 02fd6cb
Author: Jihoon Son <ji...@apache.org>
Authored: Sat Nov 30 23:15:25 2013 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Sat Nov 30 23:15:25 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 8 ++
.../java/org/apache/tajo/datum/CharDatum.java | 4 +-
.../org/apache/tajo/datum/DatumFactory.java | 2 +-
.../java/org/apache/tajo/datum/Float4Datum.java | 14 +-
.../java/org/apache/tajo/datum/Float8Datum.java | 14 +-
.../java/org/apache/tajo/datum/Int2Datum.java | 20 ++-
.../java/org/apache/tajo/datum/Int4Datum.java | 14 +-
.../java/org/apache/tajo/datum/Int8Datum.java | 14 +-
.../java/org/apache/tajo/datum/NullDatum.java | 2 +-
.../java/org/apache/tajo/datum/TextDatum.java | 4 +-
tajo-common/src/main/proto/DataTypes.proto | 4 +-
.../apache/tajo/engine/eval/FunctionEval.java | 2 +-
.../org/apache/tajo/engine/eval/IsNullEval.java | 4 +-
.../tajo/engine/function/string/BitLength.java | 48 +++++++
.../tajo/engine/function/string/Substr.java | 75 +++++++++++
.../engine/planner/physical/SeqScanExec.java | 2 +-
.../java/org/apache/tajo/master/TajoMaster.java | 12 +-
.../tajo/webapp/QueryExecutorServlet.java | 19 ++-
.../webapps/admin/WEB-INF/jetty-web.xml | 23 ++++
.../src/main/resources/webapps/admin/getCSV.jsp | 31 +++++
.../resources/webapps/admin/query_executor.jsp | 131 +++++++++++++++++--
.../TestStringOperatorsAndFunctions.java | 44 +++++++
.../storage/BinarySerializeDeserialize.java | 2 +-
.../org/apache/tajo/storage/MergeScanner.java | 49 ++++---
.../java/org/apache/tajo/storage/RawFile.java | 4 +-
.../java/org/apache/tajo/storage/RowFile.java | 2 +-
.../tajo/storage/TextSerializeDeserialize.java | 2 +-
.../tajo/storage/trevni/TrevniAppender.java | 4 +-
.../tajo/storage/trevni/TrevniScanner.java | 2 +-
.../org/apache/tajo/storage/TestLazyTuple.java | 2 +-
.../apache/tajo/storage/TestMergeScanner.java | 33 ++++-
.../org/apache/tajo/storage/TestStorages.java | 6 +-
.../apache/tajo/storage/v2/TestStorages.java | 2 +-
33 files changed, 503 insertions(+), 96 deletions(-)
----------------------------------------------------------------------