You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mb...@apache.org on 2019/03/13 00:31:08 UTC

[asterixdb] branch master updated (0ccbfa0 -> ce729be)

This is an automated email from the ASF dual-hosted git repository.

mblow pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git.


    from 0ccbfa0  [NO ISSUE] Add API to override log level on halt
     new 098ab83  [NO ISSUE][COMP] Refactor function lookup in expression translator
     new ac5b498  [NO ISSUE][HTTP] Character encoding fixes
     new 54928eb  Merge commit 'ac5b498' from 'stabilization-f69489' into 'master'
     new ce729be  Merge "Merge commit 'ac5b498' from 'stabilization-f69489' into 'master'"

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../translator/LangExpressionToPlanTranslator.java | 15 +++--
 .../apache/asterix/test/common/TestExecutor.java   | 58 +++++++----------
 hyracks-fullstack/hyracks/hyracks-http/pom.xml     |  2 -
 .../hyracks/http/server/FormUrlEncodedRequest.java | 76 ++++------------------
 .../apache/hyracks/http/server/utils/HttpUtil.java | 12 +---
 5 files changed, 47 insertions(+), 116 deletions(-)


[asterixdb] 04/04: Merge "Merge commit 'ac5b498' from 'stabilization-f69489' into 'master'"

Posted by mb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit ce729becca6db7c2b19ff3710471d73ca0300713
Merge: 0ccbfa0 54928eb
Author: Apache AsterixDB Gerrit <do...@asterixdb.incubator.apache.org>
AuthorDate: Tue Mar 12 17:29:29 2019 -0700

    Merge "Merge commit 'ac5b498' from 'stabilization-f69489' into 'master'"

 .../translator/LangExpressionToPlanTranslator.java | 15 +++--
 .../apache/asterix/test/common/TestExecutor.java   | 58 +++++++----------
 hyracks-fullstack/hyracks/hyracks-http/pom.xml     |  2 -
 .../hyracks/http/server/FormUrlEncodedRequest.java | 76 ++++------------------
 .../apache/hyracks/http/server/utils/HttpUtil.java | 12 +---
 5 files changed, 47 insertions(+), 116 deletions(-)


[asterixdb] 02/04: [NO ISSUE][HTTP] Character encoding fixes

Posted by mb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit ac5b498f27ae6e9673a7c5ce1f9e7085075a1f66
Author: Michael Blow <mb...@apache.org>
AuthorDate: Tue Mar 12 08:04:04 2019 -0400

    [NO ISSUE][HTTP] Character encoding fixes
    
    - Support alternate charset for application/x-www-form-urlencoded requests
    - Use a random charset in TestExecutor for each query request
    
    Change-Id: I4a982f7c6c34bb32652c1bdd9b546780a2d967d0
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/3265
    Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Murtadha Hubail <mh...@apache.org>
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
---
 .../apache/asterix/test/common/TestExecutor.java   | 60 ++++++++----------
 hyracks-fullstack/hyracks/hyracks-http/pom.xml     |  2 -
 .../hyracks/http/server/FormUrlEncodedRequest.java | 74 ++++------------------
 .../apache/hyracks/http/server/utils/HttpUtil.java | 12 +---
 4 files changed, 41 insertions(+), 107 deletions(-)

diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
index 4129b5a..4d9ceeb 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
@@ -39,16 +39,18 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.nio.CharBuffer;
 import java.nio.charset.Charset;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Queue;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
@@ -143,6 +145,7 @@ public class TestExecutor {
     public static final int TRUNCATE_THRESHOLD = 16384;
     public static final Set<String> NON_CANCELLABLE =
             Collections.unmodifiableSet(new HashSet<>(Arrays.asList("store", "validate")));
+    private static final int MAX_NON_UTF_8_STATEMENT_SIZE = 64 * 1024;
 
     private final IPollTask plainExecutor = this::executeTestFile;
 
@@ -156,7 +159,8 @@ public class TestExecutor {
     private static Map<String, InetSocketAddress> ncEndPoints;
     private static Map<String, InetSocketAddress> replicationAddress;
 
-    private static final List<Charset> charsetsRemaining = new ArrayList<>();
+    private final List<Charset> allCharsets;
+    private final Queue<Charset> charsetsRemaining = new ArrayDeque<>();
 
     /*
      * Instance members
@@ -181,6 +185,10 @@ public class TestExecutor {
 
     public TestExecutor(List<InetSocketAddress> endpoints) {
         this.endpoints = endpoints;
+        this.allCharsets = Stream
+                .of("UTF-8", "UTF-16", "UTF-16BE", "UTF-16LE", "UTF-32", "UTF-32BE", "UTF-32LE", "x-UTF-32BE-BOM",
+                        "x-UTF-32LE-BOM", "x-UTF-16LE-BOM")
+                .filter(Charset::isSupported).map(Charset::forName).collect(Collectors.toList());
     }
 
     public void setLibrarian(IExternalUDFLibrarian librarian) {
@@ -612,33 +620,20 @@ public class TestExecutor {
         return response.getEntity().getContent();
     }
 
-    private Charset selectCharset(File result) throws IOException {
-        // choose an encoding that works for this input
-        return selectCharset(FileUtils.readFileToString(result, UTF_8));
+    public synchronized void setAvailableCharsets(Charset... charsets) {
+        allCharsets.clear();
+        allCharsets.addAll(Arrays.asList(charsets));
+        charsetsRemaining.clear();
     }
 
-    private Charset selectCharset(String payload) {
-        // choose an encoding that works for this input
-        return nextCharset(charset -> canEncodeDecode(charset, payload));
-    }
-
-    public static Charset nextCharset(Predicate<Charset> test) {
-        synchronized (charsetsRemaining) {
-            while (true) {
-                for (Iterator<Charset> iter = charsetsRemaining.iterator(); iter.hasNext();) {
-                    Charset next = iter.next();
-                    if (test.test(next)) {
-                        iter.remove();
-                        return next;
-                    }
-                }
-                List<Charset> allCharsets = Stream
-                        .of("UTF-8", "UTF-16", "UTF-16BE", "UTF-16LE", "UTF-32", "UTF-32BE", "UTF-32LE",
-                                "x-UTF-32BE-BOM", "x-UTF-32LE-BOM", "x-UTF-16LE-BOM")
-                        .filter(Charset::isSupported).map(Charset::forName).collect(Collectors.toList());
-                Collections.shuffle(allCharsets);
-                charsetsRemaining.addAll(allCharsets);
+    private synchronized Charset nextCharset() {
+        while (true) {
+            Charset nextCharset = charsetsRemaining.poll();
+            if (nextCharset != null) {
+                return nextCharset;
             }
+            Collections.shuffle(allCharsets);
+            charsetsRemaining.addAll(allCharsets);
         }
     }
 
@@ -739,12 +734,12 @@ public class TestExecutor {
             for (Parameter param : upsertParam(otherParams, stmtParam, ParameterTypeEnum.STRING, statement)) {
                 builder.addParameter(param.getName(), param.getValue());
             }
-            builder.addParameter(stmtParam, statement);
+            builder.setCharset(statement.length() > MAX_NON_UTF_8_STATEMENT_SIZE ? UTF_8 : nextCharset());
         } else {
             // this seems pretty bad - we should probably fix the API and not the client
-            builder.setEntity(new StringEntity(statement, UTF_8));
+            builder.setEntity(new StringEntity(statement,
+                    statement.length() > MAX_NON_UTF_8_STATEMENT_SIZE ? UTF_8 : nextCharset()));
         }
-        builder.setCharset(UTF_8);
         return builder.build();
     }
 
@@ -775,11 +770,12 @@ public class TestExecutor {
             }
         }
         try {
-            builder.setEntity(new StringEntity(om.writeValueAsString(content), ContentType.APPLICATION_JSON));
+            builder.setEntity(new StringEntity(om.writeValueAsString(content),
+                    ContentType.create(ContentType.APPLICATION_JSON.getMimeType(),
+                            statement.length() > MAX_NON_UTF_8_STATEMENT_SIZE ? UTF_8 : nextCharset())));
         } catch (JsonProcessingException e) {
             e.printStackTrace();
         }
-        builder.setCharset(UTF_8);
         return builder.build();
     }
 
@@ -1253,7 +1249,7 @@ public class TestExecutor {
         URI uri = testFile.getName().endsWith("aql") ? getEndpoint(Servlets.QUERY_AQL)
                 : getEndpoint(Servlets.QUERY_SERVICE);
         boolean isJsonEncoded = isJsonEncoded(extractHttpRequestType(statement));
-        Charset responseCharset = expectedResultFile == null ? UTF_8 : selectCharset(expectedResultFile);
+        Charset responseCharset = expectedResultFile == null ? UTF_8 : nextCharset();
         InputStream resultStream;
         if (DELIVERY_IMMEDIATE.equals(delivery)) {
             resultStream = executeQueryService(statement, fmt, uri, params, isJsonEncoded, responseCharset, null,
diff --git a/hyracks-fullstack/hyracks/hyracks-http/pom.xml b/hyracks-fullstack/hyracks/hyracks-http/pom.xml
index 46e2004..9bfbfc2 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-http/pom.xml
@@ -54,12 +54,10 @@
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpcore</artifactId>
-      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
-      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java
index 4609967..05a7e5e 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java
@@ -18,82 +18,32 @@
  */
 package org.apache.hyracks.http.server;
 
-import java.io.IOException;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
+import org.apache.http.client.utils.URLEncodedUtils;
 import org.apache.hyracks.http.api.IServletRequest;
 import org.apache.hyracks.http.server.utils.HttpUtil;
 
 import io.netty.handler.codec.http.FullHttpRequest;
 import io.netty.handler.codec.http.QueryStringDecoder;
-import io.netty.handler.codec.http.multipart.Attribute;
-import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder;
-import io.netty.handler.codec.http.multipart.InterfaceHttpData;
-import io.netty.handler.codec.http.multipart.MixedAttribute;
 
 public class FormUrlEncodedRequest extends BaseRequest implements IServletRequest {
 
-    private final List<String> names;
-    private final List<String> values;
-
-    public static IServletRequest create(FullHttpRequest request) throws IOException {
-        List<String> names = new ArrayList<>();
-        List<String> values = new ArrayList<>();
-        HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(request);
-        try {
-            List<InterfaceHttpData> bodyHttpDatas = decoder.getBodyHttpDatas();
-            for (InterfaceHttpData data : bodyHttpDatas) {
-                if (data.getHttpDataType().equals(InterfaceHttpData.HttpDataType.Attribute)) {
-                    Attribute attr = (MixedAttribute) data;
-                    names.add(data.getName());
-                    values.add(attr.getValue());
-                }
-            }
-        } finally {
-            decoder.destroy();
-        }
-        return new FormUrlEncodedRequest(request, new QueryStringDecoder(request.uri()).parameters(), names, values);
+    public static IServletRequest create(FullHttpRequest request) {
+        Charset charset = HttpUtil.getRequestCharset(request);
+        Map<String, List<String>> parameters = new LinkedHashMap<>();
+        URLEncodedUtils.parse(request.content().toString(charset), charset).forEach(
+                pair -> parameters.computeIfAbsent(pair.getName(), a -> new ArrayList<>()).add(pair.getValue()));
+        new QueryStringDecoder(request.uri()).parameters()
+                .forEach((name, value) -> parameters.computeIfAbsent(name, a -> new ArrayList<>()).addAll(value));
+        return new FormUrlEncodedRequest(request, parameters);
     }
 
-    protected FormUrlEncodedRequest(FullHttpRequest request, Map<String, List<String>> parameters, List<String> names,
-            List<String> values) {
+    private FormUrlEncodedRequest(FullHttpRequest request, Map<String, List<String>> parameters) {
         super(request, parameters);
-        this.names = names;
-        this.values = values;
-    }
-
-    @Override
-    public String getParameter(CharSequence name) {
-        for (int i = 0; i < names.size(); i++) {
-            if (name.equals(names.get(i))) {
-                return values.get(i);
-            }
-        }
-        return HttpUtil.getParameter(parameters, name);
-    }
-
-    @Override
-    public Set<String> getParameterNames() {
-        HashSet<String> paramNames = new HashSet<>();
-        paramNames.addAll(parameters.keySet());
-        paramNames.addAll(names);
-        return Collections.unmodifiableSet(paramNames);
-    }
-
-    @Override
-    public Map<String, String> getParameters() {
-        HashMap<String, String> paramMap = new HashMap<>();
-        paramMap.putAll(super.getParameters());
-        for (int i = 0; i < names.size(); i++) {
-            paramMap.put(names.get(i), values.get(i));
-        }
-
-        return Collections.unmodifiableMap(paramMap);
     }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java
index 6e4a273..5326019 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java
@@ -73,17 +73,7 @@ public class HttpUtil {
 
     public static String getParameter(Map<String, List<String>> parameters, CharSequence name) {
         List<String> parameter = parameters.get(String.valueOf(name));
-        if (parameter == null) {
-            return null;
-        } else if (parameter.size() == 1) {
-            return parameter.get(0);
-        } else {
-            StringBuilder aString = new StringBuilder(parameter.get(0));
-            for (int i = 1; i < parameter.size(); i++) {
-                aString.append(",").append(parameter.get(i));
-            }
-            return aString.toString();
-        }
+        return parameter == null ? null : String.join(",", parameter);
     }
 
     public static IServletRequest toServletRequest(FullHttpRequest request) throws IOException {


[asterixdb] 03/04: Merge commit 'ac5b498' from 'stabilization-f69489' into 'master'

Posted by mb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit 54928eb6a3b03c7d71d1c07e11d813f9be8798da
Merge: 4b0ea93 ac5b498
Author: Michael Blow <mb...@apache.org>
AuthorDate: Tue Mar 12 13:43:08 2019 -0400

    Merge commit 'ac5b498' from 'stabilization-f69489' into 'master'
    
    Change-Id: Iaf16894f0628189e3d2de685f2b3f132c65baff3

 .../translator/LangExpressionToPlanTranslator.java | 15 +++--
 .../apache/asterix/test/common/TestExecutor.java   | 58 +++++++----------
 hyracks-fullstack/hyracks/hyracks-http/pom.xml     |  2 -
 .../hyracks/http/server/FormUrlEncodedRequest.java | 76 ++++------------------
 .../apache/hyracks/http/server/utils/HttpUtil.java | 12 +---
 5 files changed, 47 insertions(+), 116 deletions(-)

diff --cc hyracks-fullstack/hyracks/hyracks-http/pom.xml
index a0e426b,9bfbfc2..bf96e79
--- a/hyracks-fullstack/hyracks/hyracks-http/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-http/pom.xml
@@@ -59,15 -58,8 +58,14 @@@
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
-       <scope>test</scope>
      </dependency>
      <dependency>
 +      <groupId>org.apache.httpcomponents</groupId>
 +      <artifactId>httpcore-nio</artifactId>
 +      <version>4.4.10</version>
 +      <scope>test</scope>
 +    </dependency>
 +    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
diff --cc hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java
index 08271a6,05a7e5e..42712fd
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java
@@@ -18,86 -18,32 +18,36 @@@
   */
  package org.apache.hyracks.http.server;
  
- import java.io.IOException;
+ import java.nio.charset.Charset;
 +import java.net.InetSocketAddress;
  import java.util.ArrayList;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.HashSet;
+ import java.util.LinkedHashMap;
  import java.util.List;
  import java.util.Map;
- import java.util.Set;
  
+ import org.apache.http.client.utils.URLEncodedUtils;
  import org.apache.hyracks.http.api.IServletRequest;
  import org.apache.hyracks.http.server.utils.HttpUtil;
  
 +import io.netty.channel.ChannelHandlerContext;
  import io.netty.handler.codec.http.FullHttpRequest;
  import io.netty.handler.codec.http.QueryStringDecoder;
- import io.netty.handler.codec.http.multipart.Attribute;
- import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder;
- import io.netty.handler.codec.http.multipart.InterfaceHttpData;
- import io.netty.handler.codec.http.multipart.MixedAttribute;
  
  public class FormUrlEncodedRequest extends BaseRequest implements IServletRequest {
  
-     private final List<String> names;
-     private final List<String> values;
- 
-     public static IServletRequest create(ChannelHandlerContext ctx, FullHttpRequest request) throws IOException {
-         List<String> names = new ArrayList<>();
-         List<String> values = new ArrayList<>();
-         HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(request);
-         try {
-             List<InterfaceHttpData> bodyHttpDatas = decoder.getBodyHttpDatas();
-             for (InterfaceHttpData data : bodyHttpDatas) {
-                 if (data.getHttpDataType().equals(InterfaceHttpData.HttpDataType.Attribute)) {
-                     Attribute attr = (MixedAttribute) data;
-                     names.add(data.getName());
-                     values.add(attr.getValue());
-                 }
-             }
-         } finally {
-             decoder.destroy();
-         }
 -    public static IServletRequest create(FullHttpRequest request) {
++    public static IServletRequest create(ChannelHandlerContext ctx, FullHttpRequest request) {
+         Charset charset = HttpUtil.getRequestCharset(request);
+         Map<String, List<String>> parameters = new LinkedHashMap<>();
+         URLEncodedUtils.parse(request.content().toString(charset), charset).forEach(
+                 pair -> parameters.computeIfAbsent(pair.getName(), a -> new ArrayList<>()).add(pair.getValue()));
+         new QueryStringDecoder(request.uri()).parameters()
+                 .forEach((name, value) -> parameters.computeIfAbsent(name, a -> new ArrayList<>()).addAll(value));
 -        return new FormUrlEncodedRequest(request, parameters);
 +        InetSocketAddress remoteAddress = (InetSocketAddress) ctx.channel().remoteAddress();
-         return new FormUrlEncodedRequest(request, remoteAddress, new QueryStringDecoder(request.uri()).parameters(),
-                 names, values);
++        return new FormUrlEncodedRequest(request, remoteAddress, parameters);
      }
  
-     protected FormUrlEncodedRequest(FullHttpRequest request, InetSocketAddress remoteAddress,
-             Map<String, List<String>> parameters, List<String> names, List<String> values) {
 -    private FormUrlEncodedRequest(FullHttpRequest request, Map<String, List<String>> parameters) {
 -        super(request, parameters);
++    private FormUrlEncodedRequest(FullHttpRequest request, InetSocketAddress remoteAddress,
++            Map<String, List<String>> parameters) {
 +        super(request, remoteAddress, parameters);
-         this.names = names;
-         this.values = values;
-     }
- 
-     @Override
-     public String getParameter(CharSequence name) {
-         for (int i = 0; i < names.size(); i++) {
-             if (name.equals(names.get(i))) {
-                 return values.get(i);
-             }
-         }
-         return HttpUtil.getParameter(parameters, name);
-     }
- 
-     @Override
-     public Set<String> getParameterNames() {
-         HashSet<String> paramNames = new HashSet<>();
-         paramNames.addAll(parameters.keySet());
-         paramNames.addAll(names);
-         return Collections.unmodifiableSet(paramNames);
-     }
- 
-     @Override
-     public Map<String, String> getParameters() {
-         HashMap<String, String> paramMap = new HashMap<>();
-         paramMap.putAll(super.getParameters());
-         for (int i = 0; i < names.size(); i++) {
-             paramMap.put(names.get(i), values.get(i));
-         }
- 
-         return Collections.unmodifiableMap(paramMap);
      }
  }
diff --cc hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java
index 78b5096,5326019..34ca2c4
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java
@@@ -77,23 -73,12 +77,13 @@@ public class HttpUtil 
  
      public static String getParameter(Map<String, List<String>> parameters, CharSequence name) {
          List<String> parameter = parameters.get(String.valueOf(name));
-         if (parameter == null) {
-             return null;
-         } else if (parameter.size() == 1) {
-             return parameter.get(0);
-         } else {
-             StringBuilder aString = new StringBuilder(parameter.get(0));
-             for (int i = 1; i < parameter.size(); i++) {
-                 aString.append(",").append(parameter.get(i));
-             }
-             return aString.toString();
-         }
+         return parameter == null ? null : String.join(",", parameter);
      }
  
 -    public static IServletRequest toServletRequest(FullHttpRequest request) throws IOException {
 +    public static IServletRequest toServletRequest(ChannelHandlerContext ctx, FullHttpRequest request)
 +            throws IOException {
          return ContentType.APPLICATION_X_WWW_FORM_URLENCODED.equals(getContentTypeOnly(request))
 -                ? FormUrlEncodedRequest.create(request) : BaseRequest.create(request);
 +                ? FormUrlEncodedRequest.create(ctx, request) : BaseRequest.create(ctx, request);
      }
  
      public static String getContentTypeOnly(IServletRequest request) {


[asterixdb] 01/04: [NO ISSUE][COMP] Refactor function lookup in expression translator

Posted by mb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit 098ab831842b20e5666805bffbe4592db35c8c72
Author: Dmitry Lychagin <dm...@couchbase.com>
AuthorDate: Mon Mar 11 16:30:50 2019 -0700

    [NO ISSUE][COMP] Refactor function lookup in expression translator
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    - Move function lookup code in LangExpressionToPlanTranslator
      into a separate method so it can be modified by product extensions
    
    Change-Id: I917665fd631b220daa6fe7436288193b0dec60b4
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/3258
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Ali Alsuliman <al...@gmail.com>
---
 .../translator/LangExpressionToPlanTranslator.java        | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index 91de474..96773a6 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -779,10 +779,8 @@ class LangExpressionToPlanTranslator
         }
 
         SourceLocation sourceLoc = fcall.getSourceLocation();
-        AbstractFunctionCallExpression f;
-        if ((f = lookupUserDefinedFunction(signature, args, sourceLoc)) == null) {
-            f = lookupBuiltinFunction(signature.getName(), signature.getArity(), args, sourceLoc);
-        }
+
+        AbstractFunctionCallExpression f = lookupFunction(signature, args, sourceLoc);
 
         if (f == null) {
             throw new CompilationException(ErrorCode.UNKNOWN_FUNCTION, sourceLoc,
@@ -816,6 +814,15 @@ class LangExpressionToPlanTranslator
         return varRef;
     }
 
+    protected AbstractFunctionCallExpression lookupFunction(FunctionSignature signature,
+            List<Mutable<ILogicalExpression>> args, SourceLocation sourceLoc) throws CompilationException {
+        AbstractFunctionCallExpression f;
+        if ((f = lookupUserDefinedFunction(signature, args, sourceLoc)) == null) {
+            f = lookupBuiltinFunction(signature.getName(), signature.getArity(), args, sourceLoc);
+        }
+        return f;
+    }
+
     private AbstractFunctionCallExpression lookupUserDefinedFunction(FunctionSignature signature,
             List<Mutable<ILogicalExpression>> args, SourceLocation sourceLoc) throws CompilationException {
         try {