@Override public double plan() throws Exception { try{ final RecordingObserver recording = new RecordingObserver(); final AttemptObservers observers = AttemptObservers.of(observer, recording); observers.planStart(sql); plan = handler.getPlan(config.cloneWithNewObserver(observers), sql, sqlNode); PreparedPlan prepared = new PreparedPlan(context.getQueryId(), context.getQueryUserName(), sql, plan, recording); final Long handle = PREPARE_ID.getAndIncrement(); state = ServerPreparedStatementState.newBuilder() .setHandle(handle) .setSqlQuery(sql) .setPrepareId(context.getQueryId()) .build(); planCache.put(handle, prepared); // record a partial plan so that we can grab metadata and use it (for example during view creation of via sql). observers.planCompleted(new ExecutionPlan(plan, ImmutableList.of(), ImmutableList.of())); return 1; }catch(Exception ex){ throw SqlExceptionHelper.coerceException(logger, sql, ex, true); } }
/** * <code>optional .exec.shared.QueryId prepare_id = 3;</code> */ private com.google.protobuf.SingleFieldBuilder< com.dremio.exec.proto.UserBitShared.QueryId, com.dremio.exec.proto.UserBitShared.QueryId.Builder, com.dremio.exec.proto.UserBitShared.QueryIdOrBuilder> getPrepareIdFieldBuilder() { if (prepareIdBuilder_ == null) { prepareIdBuilder_ = new com.google.protobuf.SingleFieldBuilder< com.dremio.exec.proto.UserBitShared.QueryId, com.dremio.exec.proto.UserBitShared.QueryId.Builder, com.dremio.exec.proto.UserBitShared.QueryIdOrBuilder>( prepareId_, getParentForChildren(), isClean()); prepareId_ = null; } return prepareIdBuilder_; }
/** * <code>optional .exec.shared.QueryId prepare_id = 3;</code> */ public com.dremio.exec.proto.UserBitShared.QueryId.Builder getPrepareIdBuilder() { bitField0_ |= 0x00000004; onChanged(); return getPrepareIdFieldBuilder().getBuilder(); } /**
public void mergeFrom(io.protostuff.Input input, com.dremio.exec.proto.ExecProtos.ServerPreparedStatementState.Builder builder) throws java.io.IOException { for(int number = input.readFieldNumber(this);; number = input.readFieldNumber(this)) { switch(number) { case 0: return; case 1: builder.setSqlQuery(input.readString()); break; case 2: builder.setHandle(input.readInt64()); break; case 3: builder.setPrepareId(input.mergeObject(com.dremio.exec.proto.UserBitShared.QueryId.newBuilder(), com.dremio.exec.proto.SchemaUserBitShared.QueryId.MERGE)); break; default: input.handleUnknownField(number, this); } } } public boolean isInitialized(com.dremio.exec.proto.ExecProtos.ServerPreparedStatementState.Builder builder)
@Test public void invalidPrepareHandle() throws Exception { final ServerPreparedStatementState state = ServerPreparedStatementState.newBuilder() .setHandle(-23) // Handles start from 0 in the sever. This is relying on server implementation detail. May need to find a better way to test it. .setSqlQuery("SELECT sales_city, count(*) as cnt FROM cp.\"region.json\" " + "GROUP BY sales_city ORDER BY sales_city DESC LIMIT 2") .setPrepareId(QueryId.newBuilder().build()) .build(); PreparedStatement preparedStatement = PreparedStatement.newBuilder() .setServerHandle(PreparedStatementHandle.newBuilder().setServerInfo(state.toByteString()).build()) .build(); testBuilder() .unOrdered() .preparedStatement(preparedStatement.getServerHandle()) .baselineColumns("sales_city", "cnt") .baselineValues("Yakima", 1L) .baselineValues("Woodland Hills", 1L) .go(); }
public Builder mergeFrom(com.dremio.exec.proto.ExecProtos.ServerPreparedStatementState other) { if (other == com.dremio.exec.proto.ExecProtos.ServerPreparedStatementState.getDefaultInstance()) return this; if (other.hasSqlQuery()) { bitField0_ |= 0x00000001; sqlQuery_ = other.sqlQuery_; onChanged(); } if (other.hasHandle()) { setHandle(other.getHandle()); } if (other.hasPrepareId()) { mergePrepareId(other.getPrepareId()); } this.mergeUnknownFields(other.getUnknownFields()); return this; }
private static Builder create() { return new Builder(); }
public Builder clone() { return create().mergeFrom(buildPartial()); }
private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { getPrepareIdFieldBuilder(); } } private static Builder create() {
public com.dremio.exec.proto.ExecProtos.ServerPreparedStatementState build() { com.dremio.exec.proto.ExecProtos.ServerPreparedStatementState result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } return result; }
@java.lang.Override protected Builder newBuilderForType( com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } /**
@Override public CreatePreparedStatementResp execute() throws Exception { ServerPreparedStatementState state = ServerPreparedStatementState.newBuilder().setHandle(-1).setSqlQuery(sql).build(); return PreparedStatementProvider.build(schema, state, context.getQueryId(), context.getSession().getCatalogName()); }