public QueryLevelOptionValidation(OptionValidator inner) { super(inner.getOptionName()); this.inner = inner; }
@Override public String getOptionName() { return inner.getOptionName(); }
/** * Gets the current option value given a validator. * * @param validator the validator * @return option value * @throws IllegalArgumentException - if the validator is not found */ private OptionValue getOptionSafe(OptionValidator validator) { return getOption(validator.getOptionName()); }
private static CaseInsensitiveMap<OptionValidator> getValidators(ScanResult scanResult) { ImmutableMap.Builder<String, OptionValidator> builder = ImmutableMap.builder(); for(Class<?> clazz: scanResult.getAnnotatedClasses(Options.class)) { for(Field field: clazz.getDeclaredFields()) { if (!(OptionValidator.class.isAssignableFrom(field.getType()))) { continue; } final OptionValidator optionValidator; try { optionValidator = (OptionValidator) field.get(null); } catch (IllegalAccessException e) { logger.info("Ignoring not-accessible option {}.{}", clazz.getName(), field.getName(), e); continue; } builder.put(optionValidator.getOptionName(), optionValidator); } } return CaseInsensitiveMap.newImmutableMap(builder.build()); }
DirectBuilder(String sql, SqlNode sqlNode, boolean prepare) { this.sqlNode = sqlNode; this.prepare = prepare; this.sql = sql; final StoreQueryResultsPolicy storeQueryResultsPolicy = Optional .ofNullable(context.getOptions().getOption(STORE_QUERY_RESULTS.getOptionName())) .map(o -> StoreQueryResultsPolicy.valueOf(o.getStringVal().toUpperCase(Locale.ROOT))) .orElse(StoreQueryResultsPolicy.NO); this.storeResults = storeQueryResultsPolicy != StoreQueryResultsPolicy.NO; }
public boolean isBroadcastJoinEnabled() { return options.getOption(BROADCAST.getOptionName()).getBoolVal(); }
public long getIdentifierMaxLength(){ return options.getOption(IDENTIFIER_MAX_LENGTH.getOptionName()).getNumVal(); }
public double getHashJoinSwapMarginFactor() { return options.getOption(HASH_JOIN_SWAP_MARGIN_FACTOR.getOptionName()).getFloatVal() / 100d; }
switch(validator.getDefault().getKind()){ case BOOLEAN: this.setOption(OptionValue.createBoolean(OptionType.SYSTEM, validator.getOptionName(), Boolean.parseBoolean(value))); break; case DOUBLE: this.setOption(OptionValue.createDouble(OptionType.SYSTEM, validator.getOptionName(), Double.parseDouble(value))); break; case LONG: this.setOption(OptionValue.createLong(OptionType.SYSTEM, validator.getOptionName(), Long.parseLong(value))); break; case STRING: this.setOption(OptionValue.createString(OptionType.SYSTEM, validator.getOptionName(), value)); break; default:
private static AutoCloseable withOptionInternal(final OptionValidator validator, Object value, boolean isSystem) throws Exception{ final String optionScope = isSystem ? "SYSTEM":"SESSION"; testNoResult(String.format("ALTER %s SET %s%s%s = %s", optionScope, SqlUtils.QUOTE, validator.getOptionName(), SqlUtils.QUOTE, value)); return new AutoCloseable(){ @Override public void close() throws Exception { testNoResult(String.format("ALTER %s RESET %s%s%s", optionScope, SqlUtils.QUOTE, validator.getOptionName(), SqlUtils.QUOTE)); } }; }
@Override public void close() throws Exception { testNoResult(String.format("ALTER %s RESET %s%s%s", optionScope, SqlUtils.QUOTE, validator.getOptionName(), SqlUtils.QUOTE)); } };
protected static void resetSessionOption(final OptionValidator option) { resetSessionOption(option.getOptionName()); }
protected static void setSessionOption(final OptionValidator option, final String value) { setSessionOption(option.getOptionName(), value); }
/** * Initializes this option manager. * * @return this option manager * @throws Exception */ public SystemOptionManager init() throws Exception { options = provider.getOrCreateStore(STORE_NAME, OptionStoreCreator.class, new JacksonSerializer<>(lpPersistance.getMapper(), OptionValue.class)); // if necessary, deprecate and replace options from persistent store for (final Entry<String, OptionValue> entry : Lists.newArrayList(options.getAll())) { final String name = entry.getKey(); final OptionValue value = entry.getValue(); final OptionValidator validator = validators.get(name); if (validator == null) { // deprecated option, delete. options.delete(name); logger.warn("Deleting deprecated option `{}`", name); } else { final String canonicalName = validator.getOptionName().toLowerCase(); if (!name.equals(canonicalName)) { // for backwards compatibility <= 1.1, rename to lower case. logger.warn("Changing option name to lower case `{}`", name); options.delete(name); options.put(canonicalName, value); } } } updateBasedOnSystemProperties(); return this; }
@Before public void setupOptions() throws Exception { testNoResult("ALTER SESSION SET \"%s\" = true", ExecConstants.ENABLE_VERBOSE_ERRORS.getOptionName()); }
@Before public void setupOptions() throws Exception { testNoResult("ALTER SESSION SET \"%s\" = true", ExecConstants.ENABLE_VERBOSE_ERRORS.getOptionName()); }
private Writer getWriter(OptionManager options) throws IOException{ final StoreQueryResultsPolicy storeQueryResultsPolicy = Optional .ofNullable(options.getOption(STORE_QUERY_RESULTS.getOptionName())) .map(o -> StoreQueryResultsPolicy.valueOf(o.getStringVal().toUpperCase(Locale.ROOT))) .orElse(StoreQueryResultsPolicy.NO); final String storeTablePath = options.getOption(QUERY_RESULTS_STORE_TABLE.getOptionName()).getStringVal(); final Quoting quoting = Optional.ofNullable(context.getSession().getInitialQuoting()).orElse(ParserConfig.QUOTING); final List<String> storeTable =
final OptionManager options = context.getOptions(); final StoreQueryResultsPolicy storeQueryResultsPolicy = Optional .ofNullable(options.getOption(STORE_QUERY_RESULTS.getOptionName())) .map(o -> StoreQueryResultsPolicy.valueOf(o.getStringVal().toUpperCase(Locale.ROOT))) .orElse(StoreQueryResultsPolicy.NO); final String storeTablePath = options.getOption(QUERY_RESULTS_STORE_TABLE.getOptionName()).getStringVal(); final List<String> storeTable = new StrTokenizer(storeTablePath, '.', config.quoting().string.charAt(0))
@Test @Ignore // TODO file JIRA to fix this public void testFix2967() throws Exception { setSessionOption(PlannerSettings.BROADCAST.getOptionName(), "false"); setSessionOption(PlannerSettings.HASHJOIN.getOptionName(), "false"); setSessionOption(ExecConstants.SLICE_TARGET, "1"); setSessionOption(ExecConstants.MAX_WIDTH_PER_NODE_KEY, "23"); final String TEST_RES_PATH = TestTools.getWorkingPath() + "/src/test/resources"; try { test("select * from dfs.\"%s/join/j1\" j1 left outer join dfs.\"%s/join/j2\" j2 on (j1.c_varchar = j2.c_varchar)", TEST_RES_PATH, TEST_RES_PATH); } finally { setSessionOption(PlannerSettings.BROADCAST.getOptionName(), String.valueOf(PlannerSettings.BROADCAST.getDefault ().getBoolVal())); setSessionOption(PlannerSettings.HASHJOIN.getOptionName(), String.valueOf(PlannerSettings.HASHJOIN.getDefault() .getBoolVal())); setSessionOption(ExecConstants.SLICE_TARGET, String.valueOf(ExecConstants.SLICE_TARGET_DEFAULT)); setSessionOption(ExecConstants.MAX_WIDTH_PER_NODE_KEY, String.valueOf(ExecConstants.MAX_WIDTH_PER_NODE .getDefault().getNumVal())); } }
@Override public void applyOptions(OptionManager manager) { if (enableLeafLimits) { manager.setOption(createBoolean(QUERY, PlannerSettings.ENABLE_LEAF_LIMITS.getOptionName(), true)); manager.setOption(createLong(QUERY, ExecConstants.MAX_WIDTH_GLOBAL_KEY, manager.getOption(PlannerSettings.LEAF_LIMIT_MAX_WIDTH))); manager.setOption(createLong(QUERY, ExecConstants.SLICE_TARGET, 1)); } if (enableOutputLimits) { manager.setOption(createBoolean(QUERY, PlannerSettings.ENABLE_OUTPUT_LIMITS.getOptionName(), true)); } // always store results manager.setOption(createString(QUERY, PlannerSettings.STORE_QUERY_RESULTS.getOptionName(), StoreQueryResultsPolicy.PATH_AND_ATTEMPT_ID.name())); manager.setOption(createString(QUERY, PlannerSettings.QUERY_RESULTS_STORE_TABLE.getOptionName(), queryResultsStorePath)); if (!allowPartitionPruning) { manager.setOption(createBoolean(QUERY, PlannerSettings.ENABLE_PARTITION_PRUNING.getOptionName(), false)); } if (internalSingleThreaded) { manager.setOption(createBoolean(QUERY, ExecConstants.SORT_FILE_BLOCKS.getOptionName(), true)); manager.setOption(createBoolean(QUERY, PlannerSettings.EXCHANGE.getOptionName(), true)); } }