/** * StormDataContext Constructor. */ public StormDataContext() { // Store the time at which the query started executing. The SQL // standard says that functions such as CURRENT_TIMESTAMP return the // same value throughout the query. final Holder<Long> timeHolder = Holder.of(System.currentTimeMillis()); // Give a hook chance to alter the clock. Hook.CURRENT_TIME.run(timeHolder); final long time = timeHolder.get(); final TimeZone timeZone = Calendar.getInstance().getTimeZone(); final long localOffset = timeZone.getOffset(time); final long currentOffset = localOffset; ImmutableMap.Builder<Object, Object> builder = ImmutableMap.builder(); builder.put(Variable.UTC_TIMESTAMP.camelName, time) .put(Variable.CURRENT_TIMESTAMP.camelName, time + currentOffset) .put(Variable.LOCAL_TIMESTAMP.camelName, time + localOffset) .put(Variable.TIME_ZONE.camelName, timeZone); map = builder.build(); }
@Override public void evaluate() throws Throwable { clearRecordedQueries(); final Consumer<Object> function = query -> { try { recordedQueries.add((Query) query); log.info( "Issued query: %s", objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(query) ); } catch (Exception e) { log.warn(e, "Failed to serialize query: %s", query); } }; try (final Hook.Closeable unhook = Hook.QUERY_PLAN.add(function)) { base.evaluate(); } } };
/** @deprecated Use {@link #addThread(Consumer)}. */ @SuppressWarnings("Guava") @Deprecated // to be removed in 2.0 public <T, R> Closeable addThread( final com.google.common.base.Function<T, R> handler) { return addThread((Consumer<T>) handler::apply); }
@Test public <T> void testReduceCaseNullabilityChange() throws Exception { HepProgram program = new HepProgramBuilder() .addRuleInstance(ReduceExpressionsRule.FILTER_INSTANCE) .addRuleInstance(ReduceExpressionsRule.PROJECT_INSTANCE) .build(); try (Hook.Closeable a = Hook.REL_BUILDER_SIMPLIFY.add(Hook.propertyJ(false))) { checkPlanning(program, "select case when empno = 1 then 1 when 1 IS NOT NULL then 2 else null end as qx " + "from emp"); } }
/** Adds a property hook. */ public <V> AssertQuery withProperty(Hook hook, V value) { return withHook(hook, Hook.propertyJ(value)); }
if (Hook.ENABLE_BINDABLE.get(false)) { return LogicalTableScan.create(cluster, this);
/** Adds a handler for this thread. */ public <T> Closeable addThread(final Consumer<T> handler) { //noinspection unchecked threadHandlers.get().add((Consumer<Object>) handler); return () -> removeThread(handler); }
/** Adds a handler for this Hook. * * <p>Returns a {@link Hook.Closeable} so that you can use the following * try-finally pattern to prevent leaks:</p> * * <blockquote><pre> * final Hook.Closeable closeable = Hook.FOO.add(HANDLER); * try { * ... * } finally { * closeable.close(); * }</pre> * </blockquote> */ public <T> Closeable add(final Consumer<T> handler) { //noinspection unchecked handlers.add((Consumer<Object>) handler); return () -> remove(handler); }
/** @deprecated Use {@link #addThread(Consumer)}. */ @SuppressWarnings("Guava") @Deprecated // to be removed in 2.0 public <T, R> Closeable addThread( final com.google.common.base.Function<T, R> handler) { return addThread((Consumer<T>) handler::apply); }
public RelRoot toRel(final SqlNode validatedNode) { if (planner == null) { planner = new VolcanoPlanner(costFactory, settings); planner.setExecutor(new DrillConstExecutor(functions, util, settings)); planner.clearRelTraitDefs(); planner.addRelTraitDef(ConventionTraitDef.INSTANCE); planner.addRelTraitDef(DrillDistributionTraitDef.INSTANCE); planner.addRelTraitDef(RelCollationTraitDef.INSTANCE); } if (cluster == null) { initCluster(); } final SqlToRelConverter sqlToRelConverter = new SqlToRelConverter(new Expander(), validator, catalog, cluster, DrillConvertletTable.INSTANCE, sqlToRelConverterConfig); /* * Sets value to false to avoid simplifying project expressions * during creating new projects since it may cause changing data mode * which causes to assertion errors during type validation */ Hook.REL_BUILDER_SIMPLIFY.add(Hook.propertyJ(false)); //To avoid unexpected column errors set a value of top to false final RelRoot rel = sqlToRelConverter.convertQuery(validatedNode, false, false); return rel.withRel(sqlToRelConverter.flattenTypes(rel.rel, true)); }
/** Adds a property hook. */ public <V> AssertQuery withProperty(Hook hook, V value) { return withHook(hook, Hook.propertyJ(value)); }
if (Hook.ENABLE_BINDABLE.get(false)) { return LogicalTableScan.create(cluster, this);
/** Adds a handler for this thread. */ public <T> Closeable addThread(final Consumer<T> handler) { //noinspection unchecked threadHandlers.get().add((Consumer<Object>) handler); return () -> removeThread(handler); }
/** Adds a handler for this Hook. * * <p>Returns a {@link Hook.Closeable} so that you can use the following * try-finally pattern to prevent leaks:</p> * * <blockquote><pre> * final Hook.Closeable closeable = Hook.FOO.add(HANDLER); * try { * ... * } finally { * closeable.close(); * }</pre> * </blockquote> */ public <T> Closeable add(final Consumer<T> handler) { //noinspection unchecked handlers.add((Consumer<Object>) handler); return () -> remove(handler); }
@SuppressWarnings("unchecked") private <T> Sequence<T> runQuery(Query<T> query) { Hook.QUERY_PLAN.run(query); final String queryId = UUID.randomUUID().toString(); plannerContext.addNativeQueryId(queryId); query = query.withId(queryId) .withSqlQueryId(plannerContext.getSqlQueryId()); final AuthenticationResult authenticationResult = plannerContext.getAuthenticationResult(); return queryLifecycleFactory.factorize().runSimple(query, authenticationResult, null); }
@Before public void before() { this.closeable = Hook.CONVERTED.addThread(SqlToRelConverterExtendedTest::foo); }
/** @deprecated Use {@link #add(Consumer)}. */ @SuppressWarnings("Guava") @Deprecated // to be removed in 2.0 public <T, R> Closeable add(final Function<T, R> handler) { return add((Consumer<T>) handler::apply); }
public <V> Sql withProperty(Hook hook, V value) { return withHook(hook, Hook.propertyJ(value)); }