[ 
https://issues.apache.org/jira/browse/DRILL-7604?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17045348#comment-17045348
 ] 

ASF GitHub Bot commented on DRILL-7604:
---------------------------------------

arina-ielchiieva commented on pull request #1997: DRILL-7604: Allow session 
options to be set in HTTP queries
URL: https://github.com/apache/drill/pull/1997#discussion_r384392947
 
 

 ##########
 File path: 
exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryWrapper.java
 ##########
 @@ -131,6 +146,52 @@ public QueryResult run(final WorkManager workManager, 
final WebUserConnection we
     return new QueryResult(queryId, webUserConnection, 
webUserConnection.results);
   }
 
+  private void applyOptions(WebUserConnection webUserConnection) throws 
BadRequestException {
+    if (options != null && !options.isEmpty()) {
+      SessionOptionManager sessionOptionManager = 
webUserConnection.getSession().getOptions();
+      for (Map.Entry<String, Object> entry : options.entrySet()) {
+        String name = entry.getKey();
+        OptionDefinition definition = 
sessionOptionManager.getOptionDefinition(name);
+        if (definition == null) {
+          throw UserException.validationError().message("Unsupported option 
'%s'", name).build(logger);
+        }
+        if 
(!(definition.getMetaData().getAccessibleScopes().inScopeOf(OptionValue.OptionScope.SESSION)
 || 
definition.getMetaData().getAccessibleScopes().inScopeOf(OptionValue.OptionScope.QUERY)))
 {
+          throw UserException.validationError().message("Option '%s' is not a 
session / query option", name).build(logger);
+        }
+        if (definition.getMetaData().isInternal()) {
+          throw UserException.validationError().message("Internal option '%s' 
cannot be set with query", name).build(logger);
+        }
+        Object value = entry.getValue();
+        switch (definition.getValidator().getKind()) {
+          case BOOLEAN:
+            if (!(value instanceof Boolean)) {
+              throw UserException.validationError().message("Expected boolean 
value for option '%s'", name).build(logger);
+            }
+            sessionOptionManager.setLocalOption(name, (Boolean) value);
+            break;
+          case DOUBLE:
+            if (!(value instanceof Number)) {
+              throw UserException.validationError().message("Expected number 
value for option '%s'", name).build(logger);
+            }
+            sessionOptionManager.setLocalOption(name, ((Number) 
value).doubleValue());
+            break;
+          case STRING:
+            if (!(value instanceof String)) {
+              throw UserException.validationError().message("Expected string 
value for option '%s'", name).build(logger);
+            }
+            sessionOptionManager.setLocalOption(name, (String) value);
+            break;
+          case LONG:
+            if (!(value instanceof Number)) {
+              throw UserException.validationError().message("Expected number 
value for option '%s'", name).build(logger);
+            }
+            sessionOptionManager.setLocalOption(name, ((Number) 
value).longValue());
+            break;
 
 Review comment:
   Please add behavior in case of we encounter unexpected kind.
 
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Cannot set session options using REST API / Web UI
> --------------------------------------------------
>
>                 Key: DRILL-7604
>                 URL: https://issues.apache.org/jira/browse/DRILL-7604
>             Project: Apache Drill
>          Issue Type: Improvement
>          Components: Web Server
>    Affects Versions: 1.17.0
>            Reporter: Dobes Vandermeer
>            Assignee: Dobes Vandermeer
>            Priority: Minor
>
> Some commands are configured using session options that you set using the 
> `SET` command.  However, the `SET` command is not useful in the Web UI and 
> REST API because the options you set are not preserved in the next request.  
> For example, when using CREATE TABLE AS you must `SET store.format csv` to 
> set the output format to comma-separated value, but this is not possible via 
> the REST API.
> I propose that the API be updated to support options that are normally 
> provided using SET:
>  # The JSON API accepts an object "options" whose keys are options and values 
> are option values.  The values should have an appropriate type for the given 
> option, e.g. JSON boolean if the option type is boolean
>  # The form-based API used by the Web UI scans any provided form fields that 
> match a valid session option and sets those options, parsing strings 
> according to the type of option
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to