Return-Path: X-Original-To: apmail-hive-commits-archive@www.apache.org Delivered-To: apmail-hive-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6E78618836 for ; Thu, 6 Aug 2015 00:50:16 +0000 (UTC) Received: (qmail 50094 invoked by uid 500); 6 Aug 2015 00:50:09 -0000 Delivered-To: apmail-hive-commits-archive@hive.apache.org Received: (qmail 50000 invoked by uid 500); 6 Aug 2015 00:50:09 -0000 Mailing-List: contact commits-help@hive.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hive-dev@hive.apache.org Delivered-To: mailing list commits@hive.apache.org Received: (qmail 48184 invoked by uid 99); 6 Aug 2015 00:50:08 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Aug 2015 00:50:08 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 39A62E36E1; Thu, 6 Aug 2015 00:50:08 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sershe@apache.org To: commits@hive.apache.org Date: Thu, 06 Aug 2015 00:50:47 -0000 Message-Id: In-Reply-To: <8f9d1818a5f44addab68cb4879fb5a27@git.apache.org> References: <8f9d1818a5f44addab68cb4879fb5a27@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [41/53] [abbrv] hive git commit: HIVE-11406: Vectorization: StringExpr::compare() == 0 is bad for performance (Matt McCline, reviewed by Gopal V) HIVE-11406: Vectorization: StringExpr::compare() == 0 is bad for performance (Matt McCline, reviewed by Gopal V) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/c7e1d34b Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/c7e1d34b Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/c7e1d34b Branch: refs/heads/llap Commit: c7e1d34b6e8734ca65e9a635f4094876b2032d77 Parents: 290ff1f Author: Matt McCline Authored: Tue Aug 4 11:01:12 2015 -0700 Committer: Matt McCline Committed: Tue Aug 4 11:01:12 2015 -0700 ---------------------------------------------------------------------- .../apache/hadoop/hive/ant/GenVectorCode.java | 103 +++++++++++++++++ ...tringGroupColumnCompareStringGroupColumn.txt | 112 +++++++++---------- ...gGroupColumnCompareStringGroupScalarBase.txt | 12 +- ...gGroupScalarCompareStringGroupColumnBase.txt | 12 +- ...tringGroupColumnCompareStringGroupColumn.txt | 112 +++++++++---------- ...gGroupColumnCompareStringGroupScalarBase.txt | 12 +- ...gGroupScalarCompareStringGroupColumnBase.txt | 12 +- .../ql/exec/vector/expressions/StringExpr.java | 24 ++++ 8 files changed, 263 insertions(+), 136 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/c7e1d34b/ant/src/org/apache/hadoop/hive/ant/GenVectorCode.java ---------------------------------------------------------------------- diff --git a/ant/src/org/apache/hadoop/hive/ant/GenVectorCode.java b/ant/src/org/apache/hadoop/hive/ant/GenVectorCode.java index 6485a2a..54f3783 100644 --- a/ant/src/org/apache/hadoop/hive/ant/GenVectorCode.java +++ b/ant/src/org/apache/hadoop/hive/ant/GenVectorCode.java @@ -1338,6 +1338,23 @@ public class GenVectorCode extends Task { File templateFile = new File(joinPath(this.expressionTemplateDirectory, tdesc[0] + ".txt")); String templateString = readFile(templateFile); // Expand, and write result + + String compareOrEqual; + String compareOrEqualReturnType = "boolean"; + String optionalCompare = ""; + if (operatorName.equals("Equal")) { + compareOrEqual = "StringExpr.equal"; + } else if (operatorName.equals("NotEqual")) { + compareOrEqual = "!StringExpr.equal"; + } else { + compareOrEqual = "StringExpr.compare"; + compareOrEqualReturnType = "int"; + optionalCompare = operatorSymbol + " 0"; + } + templateString = templateString.replaceAll("", compareOrEqual); + templateString = templateString.replaceAll("", compareOrEqualReturnType); + templateString = templateString.replaceAll("", optionalCompare); + templateString = templateString.replaceAll("", className); templateString = templateString.replaceAll("", baseClassName); templateString = templateString.replaceAll("", operatorSymbol); @@ -1370,6 +1387,23 @@ public class GenVectorCode extends Task { File templateFile = new File(joinPath(this.expressionTemplateDirectory, tdesc[0] + ".txt")); String templateString = readFile(templateFile); // Expand, and write result + + String compareOrEqual; + String compareOrEqualReturnType = "boolean"; + String optionalCompare = ""; + if (operatorName.equals("Equal")) { + compareOrEqual = "StringExpr.equal"; + } else if (operatorName.equals("NotEqual")) { + compareOrEqual = "!StringExpr.equal"; + } else { + compareOrEqual = "StringExpr.compare"; + compareOrEqualReturnType = "int"; + optionalCompare = operatorSymbol + " 0"; + } + templateString = templateString.replaceAll("", compareOrEqual); + templateString = templateString.replaceAll("", compareOrEqualReturnType); + templateString = templateString.replaceAll("", optionalCompare); + templateString = templateString.replaceAll("", className); templateString = templateString.replaceAll("", baseClassName); templateString = templateString.replaceAll("", operatorSymbol); @@ -1399,6 +1433,23 @@ public class GenVectorCode extends Task { File templateFile = new File(joinPath(this.expressionTemplateDirectory, tdesc[0] + ".txt")); String templateString = readFile(templateFile); // Expand, and write result + + String compareOrEqual; + String compareOrEqualReturnType = "boolean"; + String optionalCompare = ""; + if (operatorName.equals("Equal")) { + compareOrEqual = "StringExpr.equal"; + } else if (operatorName.equals("NotEqual")) { + compareOrEqual = "!StringExpr.equal"; + } else { + compareOrEqual = "StringExpr.compare"; + compareOrEqualReturnType = "int"; + optionalCompare = operatorSymbol + " 0"; + } + templateString = templateString.replaceAll("", compareOrEqual); + templateString = templateString.replaceAll("", compareOrEqualReturnType); + templateString = templateString.replaceAll("", optionalCompare); + templateString = templateString.replaceAll("", className); templateString = templateString.replaceAll("", baseClassName); templateString = templateString.replaceAll("", operatorSymbol); @@ -1422,6 +1473,23 @@ public class GenVectorCode extends Task { File templateFile = new File(joinPath(this.expressionTemplateDirectory, tdesc[0] + ".txt")); String templateString = readFile(templateFile); // Expand, and write result + + String compareOrEqual; + String compareOrEqualReturnType = "boolean"; + String optionalCompare = ""; + if (operatorName.equals("Equal")) { + compareOrEqual = "StringExpr.equal"; + } else if (operatorName.equals("NotEqual")) { + compareOrEqual = "!StringExpr.equal"; + } else { + compareOrEqual = "StringExpr.compare"; + compareOrEqualReturnType = "int"; + optionalCompare = operatorSymbol + " 0"; + } + templateString = templateString.replaceAll("", compareOrEqual); + templateString = templateString.replaceAll("", compareOrEqualReturnType); + templateString = templateString.replaceAll("", optionalCompare); + templateString = templateString.replaceAll("", className); templateString = templateString.replaceAll("", operatorSymbol); writeFile(templateFile.lastModified(), expressionOutputDirectory, expressionClassesDirectory, @@ -1437,6 +1505,23 @@ public class GenVectorCode extends Task { File templateFile = new File(joinPath(this.expressionTemplateDirectory, tdesc[0] + ".txt")); String templateString = readFile(templateFile); // Expand, and write result + + String compareOrEqual; + String compareOrEqualReturnType = "boolean"; + String optionalCompare = ""; + if (operatorName.equals("Equal")) { + compareOrEqual = "StringExpr.equal"; + } else if (operatorName.equals("NotEqual")) { + compareOrEqual = "!StringExpr.equal"; + } else { + compareOrEqual = "StringExpr.compare"; + compareOrEqualReturnType = "int"; + optionalCompare = operatorSymbol + " 0"; + } + templateString = templateString.replaceAll("", compareOrEqual); + templateString = templateString.replaceAll("", compareOrEqualReturnType); + templateString = templateString.replaceAll("", optionalCompare); + templateString = templateString.replaceAll("", className); templateString = templateString.replaceAll("", baseClassName); templateString = templateString.replaceAll("", operatorSymbol); @@ -1466,11 +1551,29 @@ public class GenVectorCode extends Task { private void generateStringColumnCompareScalar(String[] tdesc, String className) throws IOException { + String operatorName = tdesc[1]; String operatorSymbol = tdesc[2]; // Read the template into a string; File templateFile = new File(joinPath(this.expressionTemplateDirectory, tdesc[0] + ".txt")); String templateString = readFile(templateFile); // Expand, and write result + + String compareOrEqual; + String compareOrEqualReturnType = "boolean"; + String optionalCompare = ""; + if (operatorName.equals("Equal")) { + compareOrEqual = "StringExpr.equal"; + } else if (operatorName.equals("NotEqual")) { + compareOrEqual = "!StringExpr.equal"; + } else { + compareOrEqual = "StringExpr.compare"; + compareOrEqualReturnType = "int"; + optionalCompare = operatorSymbol + " 0"; + } + templateString = templateString.replaceAll("", compareOrEqual); + templateString = templateString.replaceAll("", compareOrEqualReturnType); + templateString = templateString.replaceAll("", optionalCompare); + templateString = templateString.replaceAll("", className); templateString = templateString.replaceAll("", operatorSymbol); writeFile(templateFile.lastModified(), expressionOutputDirectory, expressionClassesDirectory, http://git-wip-us.apache.org/repos/asf/hive/blob/c7e1d34b/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupColumn.txt ---------------------------------------------------------------------- diff --git a/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupColumn.txt b/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupColumn.txt index 70fce17..a72b882 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupColumn.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupColumn.txt @@ -75,8 +75,8 @@ public class extends VectorExpression { /* Either all must remain selected or all will be eliminated. * Repeating property will not change. */ - if (!(StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[0], start2[0], length2[0]) 0)) { + if (!((vector1[0], start1[0], length1[0], + vector2[0], start2[0], length2[0]))) { batch.size = 0; } } else if (inputColVector1.isRepeating) { @@ -84,8 +84,8 @@ public class extends VectorExpression { int newSize = 0; for(int j = 0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -93,8 +93,8 @@ public class extends VectorExpression { } else { int newSize = 0; for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -108,8 +108,8 @@ public class extends VectorExpression { int newSize = 0; for(int j = 0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { sel[newSize++] = i; } } @@ -117,8 +117,8 @@ public class extends VectorExpression { } else { int newSize = 0; for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { sel[newSize++] = i; } } @@ -131,8 +131,8 @@ public class extends VectorExpression { int newSize = 0; for(int j = 0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -140,8 +140,8 @@ public class extends VectorExpression { } else { int newSize = 0; for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -155,8 +155,8 @@ public class extends VectorExpression { } else if (inputColVector1.noNulls) { if (inputColVector1.isRepeating && inputColVector2.isRepeating) { if (nullPos2[0] || - !(StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[0], start2[0], length2[0]) 0)) { + !((vector1[0], start1[0], length1[0], + vector2[0], start2[0], length2[0]))) { batch.size = 0; } } else if (inputColVector1.isRepeating) { @@ -167,8 +167,8 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { int i = sel[j]; if (!nullPos2[i]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -178,8 +178,8 @@ public class extends VectorExpression { int newSize = 0; for(int i = 0; i != n; i++) { if (!nullPos2[i]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -200,8 +200,8 @@ public class extends VectorExpression { int newSize = 0; for(int j = 0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { sel[newSize++] = i; } } @@ -209,8 +209,8 @@ public class extends VectorExpression { } else { int newSize = 0; for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { sel[newSize++] = i; } } @@ -225,8 +225,8 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { int i = sel[j]; if (!nullPos2[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -236,8 +236,8 @@ public class extends VectorExpression { int newSize = 0; for(int i = 0; i != n; i++) { if (!nullPos2[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -253,8 +253,8 @@ public class extends VectorExpression { } else if (inputColVector2.noNulls) { if (inputColVector1.isRepeating && inputColVector2.isRepeating) { if (nullPos1[0] || - !(StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[0], start2[0], length2[0]) 0)) { + !((vector1[0], start1[0], length1[0], + vector2[0], start2[0], length2[0]))) { batch.size = 0; return; } @@ -269,8 +269,8 @@ public class extends VectorExpression { int newSize = 0; for(int j = 0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -278,8 +278,8 @@ public class extends VectorExpression { } else { int newSize = 0; for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -294,8 +294,8 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { int i = sel[j]; if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { sel[newSize++] = i; } } @@ -305,8 +305,8 @@ public class extends VectorExpression { int newSize = 0; for(int i = 0; i != n; i++) { if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { sel[newSize++] = i; } } @@ -322,8 +322,8 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { int i = sel[j]; if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -333,8 +333,8 @@ public class extends VectorExpression { int newSize = 0; for(int i = 0; i != n; i++) { if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -350,8 +350,8 @@ public class extends VectorExpression { } else { if (inputColVector1.isRepeating && inputColVector2.isRepeating) { if (nullPos1[0] || nullPos2[0] || - !(StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[0], start2[0], length2[0]) 0)) { + !((vector1[0], start1[0], length1[0], + vector2[0], start2[0], length2[0]))) { batch.size = 0; } } else if (inputColVector1.isRepeating) { @@ -364,8 +364,8 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { int i = sel[j]; if (!nullPos2[i]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -375,8 +375,8 @@ public class extends VectorExpression { int newSize = 0; for(int i = 0; i != n; i++) { if (!nullPos2[i]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -396,8 +396,8 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { int i = sel[j]; if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { sel[newSize++] = i; } } @@ -407,8 +407,8 @@ public class extends VectorExpression { int newSize = 0; for(int i = 0; i != n; i++) { if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { sel[newSize++] = i; } } @@ -424,8 +424,8 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { int i = sel[j]; if (!nullPos1[i] && !nullPos2[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } @@ -435,8 +435,8 @@ public class extends VectorExpression { int newSize = 0; for(int i = 0; i != n; i++) { if (!nullPos1[i] && !nullPos2[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { sel[newSize++] = i; } } http://git-wip-us.apache.org/repos/asf/hive/blob/c7e1d34b/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupScalarBase.txt ---------------------------------------------------------------------- diff --git a/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupScalarBase.txt b/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupScalarBase.txt index 1c868ba..8b1c366 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupScalarBase.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupColumnCompareStringGroupScalarBase.txt @@ -57,7 +57,7 @@ public abstract class extends VectorExpression { if (inputColVector.isRepeating) { // All must be selected otherwise size would be zero. Repeating property will not change. - if (!(StringExpr.compare(vector[0], start[0], length[0], value, 0, value.length) 0)) { + if (!((vector[0], start[0], length[0], value, 0, value.length))) { //Entire batch is filtered out. batch.size = 0; @@ -66,7 +66,7 @@ public abstract class extends VectorExpression { int newSize = 0; for(int j=0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector[i], start[i], length[i], value, 0, value.length) 0) { + if ((vector[i], start[i], length[i], value, 0, value.length)) { sel[newSize++] = i; } } @@ -74,7 +74,7 @@ public abstract class extends VectorExpression { } else { int newSize = 0; for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector[i], start[i], length[i], value, 0, value.length) 0) { + if ((vector[i], start[i], length[i], value, 0, value.length)) { sel[newSize++] = i; } } @@ -88,7 +88,7 @@ public abstract class extends VectorExpression { // All must be selected otherwise size would be zero. Repeating property will not change. if (!nullPos[0]) { - if (!(StringExpr.compare(vector[0], start[0], length[0], value, 0, value.length) 0)) { + if (!((vector[0], start[0], length[0], value, 0, value.length))) { //Entire batch is filtered out. batch.size = 0; @@ -101,7 +101,7 @@ public abstract class extends VectorExpression { for(int j=0; j != n; j++) { int i = sel[j]; if (!nullPos[i]) { - if (StringExpr.compare(vector[i], start[i], length[i], value, 0, value.length) 0) { + if ((vector[i], start[i], length[i], value, 0, value.length)) { sel[newSize++] = i; } } @@ -113,7 +113,7 @@ public abstract class extends VectorExpression { int newSize = 0; for(int i = 0; i != n; i++) { if (!nullPos[i]) { - if (StringExpr.compare(vector[i], start[i], length[i], value, 0, value.length) 0) { + if ((vector[i], start[i], length[i], value, 0, value.length)) { sel[newSize++] = i; } } http://git-wip-us.apache.org/repos/asf/hive/blob/c7e1d34b/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupScalarCompareStringGroupColumnBase.txt ---------------------------------------------------------------------- diff --git a/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupScalarCompareStringGroupColumnBase.txt b/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupScalarCompareStringGroupColumnBase.txt index 91f5909..930069c 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupScalarCompareStringGroupColumnBase.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/FilterStringGroupScalarCompareStringGroupColumnBase.txt @@ -61,7 +61,7 @@ public abstract class extends VectorExpression { if (inputColVector.isRepeating) { // All must be selected otherwise size would be zero. Repeating property will not change. - if (!(StringExpr.compare(value, 0, value.length, vector[0], start[0], length[0]) 0)) { + if (!((value, 0, value.length, vector[0], start[0], length[0]))) { //Entire batch is filtered out. batch.size = 0; @@ -70,7 +70,7 @@ public abstract class extends VectorExpression { int newSize = 0; for(int j=0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(value, 0, value.length, vector[i], start[i], length[i]) 0) { + if ((value, 0, value.length, vector[i], start[i], length[i])) { sel[newSize++] = i; } } @@ -78,7 +78,7 @@ public abstract class extends VectorExpression { } else { int newSize = 0; for(int i = 0; i != n; i++) { - if (StringExpr.compare(value, 0, value.length, vector[i], start[i], length[i]) 0) { + if ((value, 0, value.length, vector[i], start[i], length[i])) { sel[newSize++] = i; } } @@ -92,7 +92,7 @@ public abstract class extends VectorExpression { // All must be selected otherwise size would be zero. Repeating property will not change. if (!nullPos[0]) { - if (!(StringExpr.compare(value, 0, value.length, vector[0], start[0], length[0]) 0)) { + if (!((value, 0, value.length, vector[0], start[0], length[0]))) { //Entire batch is filtered out. batch.size = 0; @@ -105,7 +105,7 @@ public abstract class extends VectorExpression { for(int j=0; j != n; j++) { int i = sel[j]; if (!nullPos[i]) { - if (StringExpr.compare(value, 0, value.length, vector[i], start[i], length[i]) 0) { + if ((value, 0, value.length, vector[i], start[i], length[i])) { sel[newSize++] = i; } } @@ -117,7 +117,7 @@ public abstract class extends VectorExpression { int newSize = 0; for(int i = 0; i != n; i++) { if (!nullPos[i]) { - if (StringExpr.compare(value, 0, value.length, vector[i], start[i], length[i]) 0) { + if ((value, 0, value.length, vector[i], start[i], length[i])) { sel[newSize++] = i; } } http://git-wip-us.apache.org/repos/asf/hive/blob/c7e1d34b/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupColumn.txt ---------------------------------------------------------------------- diff --git a/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupColumn.txt b/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupColumn.txt index 8ef1d97..e881037 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupColumn.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupColumn.txt @@ -83,9 +83,9 @@ public class extends VectorExpression { outputColVector.noNulls = true; if (inputColVector1.isRepeating && inputColVector2.isRepeating) { outputColVector.isRepeating = true; - int ret = StringExpr.compare(vector1[0], start1[0], length1[0], + ret = (vector1[0], start1[0], length1[0], vector2[0], start2[0], length2[0]); - if (ret 0) { + if (ret) { outVector[0] = 1; } else { outVector[0] = 0; @@ -94,8 +94,8 @@ public class extends VectorExpression { if (batch.selectedInUse) { for(int j = 0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -103,8 +103,8 @@ public class extends VectorExpression { } } else { for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -115,8 +115,8 @@ public class extends VectorExpression { if (batch.selectedInUse) { for(int j = 0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -124,8 +124,8 @@ public class extends VectorExpression { } } else { for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -135,8 +135,8 @@ public class extends VectorExpression { } else if (batch.selectedInUse) { for(int j = 0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -144,8 +144,8 @@ public class extends VectorExpression { } } else { for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -160,8 +160,8 @@ public class extends VectorExpression { outputColVector.isRepeating = true; outNull[0] = nullPos2[0]; if (!nullPos2[0]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[0], start2[0], length2[0])) { outVector[0] = 1; } else { outVector[0] = 0; @@ -175,8 +175,8 @@ public class extends VectorExpression { int i = sel[j]; outNull[i] = nullPos2[i]; if (!nullPos2[i]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -187,8 +187,8 @@ public class extends VectorExpression { for(int i = 0; i != n; i++) { outNull[i] = nullPos2[i]; if (!nullPos2[i]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -207,8 +207,8 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { int i = sel[j]; outNull[i] = false; - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -217,8 +217,8 @@ public class extends VectorExpression { } else { for(int i = 0; i != n; i++) { outNull[i] = false; - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -231,8 +231,8 @@ public class extends VectorExpression { int i = sel[j]; outNull[i] = nullPos2[i]; if (!nullPos2[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -243,8 +243,8 @@ public class extends VectorExpression { for(int i = 0; i != n; i++) { outNull[i] = nullPos2[i]; if (!nullPos2[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -261,8 +261,8 @@ public class extends VectorExpression { outputColVector.isRepeating = true; outNull[0] = nullPos1[0]; if (!nullPos1[0]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[0], start2[0], length2[0])) { outVector[0] = 1; } else { outVector[0] = 0; @@ -279,8 +279,8 @@ public class extends VectorExpression { for(int j = 0; j != n; j++) { int i = sel[j]; outNull[i] = false; - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -289,8 +289,8 @@ public class extends VectorExpression { } else { for(int i = 0; i != n; i++) { outNull[i] = false; - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -303,8 +303,8 @@ public class extends VectorExpression { int i = sel[j]; outNull[i] = nullPos1[i]; if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -315,8 +315,8 @@ public class extends VectorExpression { for(int i = 0; i != n; i++) { outNull[i] = nullPos1[i]; if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -330,8 +330,8 @@ public class extends VectorExpression { int i = sel[j]; outNull[i] = nullPos1[i]; if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -342,8 +342,8 @@ public class extends VectorExpression { for(int i = 0; i != n; i++) { outNull[i] = nullPos1[i]; if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -360,8 +360,8 @@ public class extends VectorExpression { outputColVector.isRepeating = true; outNull[0] = nullPos1[0] || nullPos2[0]; if (!outNull[0]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[0], start2[0], length2[0])) { outVector[0] = 1; } else { outVector[0] = 0; @@ -378,8 +378,8 @@ public class extends VectorExpression { int i = sel[j]; outNull[i] = nullPos2[i]; if (!nullPos2[i]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -390,8 +390,8 @@ public class extends VectorExpression { for(int i = 0; i != n; i++) { outNull[i] = nullPos2[i]; if (!nullPos2[i]) { - if (StringExpr.compare(vector1[0], start1[0], length1[0], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[0], start1[0], length1[0], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -410,8 +410,8 @@ public class extends VectorExpression { int i = sel[j]; outNull[i] = nullPos1[i]; if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -422,8 +422,8 @@ public class extends VectorExpression { for(int i = 0; i != n; i++) { outNull[i] = nullPos1[i]; if (!nullPos1[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[0], start2[0], length2[0]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[0], start2[0], length2[0])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -437,8 +437,8 @@ public class extends VectorExpression { int i = sel[j]; outNull[i] = nullPos1[i] || nullPos2[i]; if (!outNull[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -449,8 +449,8 @@ public class extends VectorExpression { for(int i = 0; i != n; i++) { outNull[i] = nullPos1[i] || nullPos2[i]; if (!outNull[i]) { - if (StringExpr.compare(vector1[i], start1[i], length1[i], - vector2[i], start2[i], length2[i]) 0) { + if ((vector1[i], start1[i], length1[i], + vector2[i], start2[i], length2[i])) { outVector[i] = 1; } else { outVector[i] = 0; http://git-wip-us.apache.org/repos/asf/hive/blob/c7e1d34b/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupScalarBase.txt ---------------------------------------------------------------------- diff --git a/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupScalarBase.txt b/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupScalarBase.txt index 4d65d50..92bf27a 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupScalarBase.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/StringGroupColumnCompareStringGroupScalarBase.txt @@ -63,7 +63,7 @@ public abstract class extends VectorExpression { outputColVector.noNulls = true; if (inputColVector.isRepeating) { outputColVector.isRepeating = true; - if (StringExpr.compare(vector[0], start[0], length[0], value, 0, value.length) 0) { + if ((vector[0], start[0], length[0], value, 0, value.length)) { outVector[0] = 1; } else { outVector[0] = 0; @@ -71,7 +71,7 @@ public abstract class extends VectorExpression { } else if (batch.selectedInUse) { for(int j=0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(vector[i], start[i], length[i], value, 0, value.length) 0) { + if ((vector[i], start[i], length[i], value, 0, value.length)) { outVector[i] = 1; } else { outVector[i] = 0; @@ -79,7 +79,7 @@ public abstract class extends VectorExpression { } } else { for(int i = 0; i != n; i++) { - if (StringExpr.compare(vector[i], start[i], length[i], value, 0, value.length) 0) { + if ((vector[i], start[i], length[i], value, 0, value.length)) { outVector[i] = 1; } else { outVector[i] = 0; @@ -92,7 +92,7 @@ public abstract class extends VectorExpression { outputColVector.isRepeating = true; outNull[0] = nullPos[0]; if (!nullPos[0]) { - if (StringExpr.compare(vector[0], start[0], length[0], value, 0, value.length) 0) { + if ((vector[0], start[0], length[0], value, 0, value.length)) { outVector[0] = 1; } else { outVector[0] = 0; @@ -103,7 +103,7 @@ public abstract class extends VectorExpression { int i = sel[j]; outNull[i] = nullPos[i]; if (!nullPos[i]) { - if (StringExpr.compare(vector[i], start[i], length[i], value, 0, value.length) 0) { + if ((vector[i], start[i], length[i], value, 0, value.length)) { outVector[i] = 1; } else { outVector[i] = 0; @@ -114,7 +114,7 @@ public abstract class extends VectorExpression { for(int i = 0; i != n; i++) { outNull[i] = nullPos[i]; if (!nullPos[i]) { - if (StringExpr.compare(vector[i], start[i], length[i], value, 0, value.length) 0) { + if ((vector[i], start[i], length[i], value, 0, value.length)) { outVector[i] = 1; } else { outVector[i] = 0; http://git-wip-us.apache.org/repos/asf/hive/blob/c7e1d34b/ql/src/gen/vectorization/ExpressionTemplates/StringGroupScalarCompareStringGroupColumnBase.txt ---------------------------------------------------------------------- diff --git a/ql/src/gen/vectorization/ExpressionTemplates/StringGroupScalarCompareStringGroupColumnBase.txt b/ql/src/gen/vectorization/ExpressionTemplates/StringGroupScalarCompareStringGroupColumnBase.txt index a734281..238dc93 100644 --- a/ql/src/gen/vectorization/ExpressionTemplates/StringGroupScalarCompareStringGroupColumnBase.txt +++ b/ql/src/gen/vectorization/ExpressionTemplates/StringGroupScalarCompareStringGroupColumnBase.txt @@ -63,7 +63,7 @@ public abstract class extends VectorExpression { outputColVector.noNulls = true; if (inputColVector.isRepeating) { outputColVector.isRepeating = true; - if (StringExpr.compare(value, 0, value.length, vector[0], start[0], length[0]) 0) { + if ((value, 0, value.length, vector[0], start[0], length[0])) { outVector[0] = 1; } else { outVector[0] = 0; @@ -71,7 +71,7 @@ public abstract class extends VectorExpression { } else if (batch.selectedInUse) { for(int j=0; j != n; j++) { int i = sel[j]; - if (StringExpr.compare(value, 0, value.length, vector[i], start[i], length[i]) 0) { + if ((value, 0, value.length, vector[i], start[i], length[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -79,7 +79,7 @@ public abstract class extends VectorExpression { } } else { for(int i = 0; i != n; i++) { - if (StringExpr.compare(value, 0, value.length, vector[i], start[i], length[i]) 0) { + if ((value, 0, value.length, vector[i], start[i], length[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -92,7 +92,7 @@ public abstract class extends VectorExpression { outputColVector.isRepeating = true; outNull[0] = nullPos[0]; if (!nullPos[0]) { - if (StringExpr.compare(value, 0, value.length, vector[0], start[0], length[0]) 0) { + if ((value, 0, value.length, vector[0], start[0], length[0])) { outVector[0] = 1; } else { outVector[0] = 0; @@ -103,7 +103,7 @@ public abstract class extends VectorExpression { int i = sel[j]; outNull[i] = nullPos[i]; if (!nullPos[i]) { - if (StringExpr.compare(value, 0, value.length, vector[i], start[i], length[i]) 0) { + if ((value, 0, value.length, vector[i], start[i], length[i])) { outVector[i] = 1; } else { outVector[i] = 0; @@ -114,7 +114,7 @@ public abstract class extends VectorExpression { for(int i = 0; i != n; i++) { outNull[i] = nullPos[i]; if (!nullPos[i]) { - if (StringExpr.compare(value, 0, value.length, vector[i], start[i], length[i]) 0) { + if ((value, 0, value.length, vector[i], start[i], length[i])) { outVector[i] = 1; } else { outVector[i] = 0; http://git-wip-us.apache.org/repos/asf/hive/blob/c7e1d34b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringExpr.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringExpr.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringExpr.java index df71d8b..ebeb642 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringExpr.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringExpr.java @@ -46,6 +46,30 @@ public class StringExpr { return len1 - len2; } + /* Determine if two strings are equal from two byte arrays each + * with their own start position and length. + * Use lexicographic unsigned byte value order. + * This is what's used for UTF-8 sort order. + */ + public static boolean equal(byte[] arg1, int start1, int len1, byte[] arg2, int start2, int len2) { + if (len1 != len2) { + return false; + } + for (int index1 = start1, + index2 = start2; + len1 > 0; + len1--, + index1++, + index2++) { + // Note the "& 0xff" is just a way to convert unsigned bytes to signed integer. + if ((arg1[index1] & 0xff) != (arg2[index2] & 0xff)) { + return false; + } + + } + return true; + } + public static int characterCount(byte[] bytes) { int end = bytes.length;