-
Bug
-
Resolution: Unresolved
-
Major
-
16.0
-
None
-
-
Undefined
example
If I would send request
SELECT Id FROM Contact LIMIT 5 OFFSET 10
I would get response as 5 rows. It is right response.
But if I used named parameters in jdbc as example
SELECT Id FROM Contact LIMIT :limitParam OFFSET :offsetParam
where limitParam =5 and offsetParam=10
Then I would get 10 rows in response and those response depends on offset only
Plan for request with jdbc named parameters
SELECT Id FROM Contact LIMIT :limitParam OFFSET :offsetParam
PLAN: LimitNode + Relational Node ID:0 + Output Columns:Id (string) + Cost Estimates:Estimated Node Cardinality: -1.0 + Child 0: AccessNode + Relational Node ID:1 + Output Columns:Id (string) + Cost Estimates:Estimated Node Cardinality: -1.0 + Query:SELECT g_0.Id FROM salesforce.Contact AS g_0 LIMIT (? + ?) + Model Name:salesforce + Row Offset:? + Row Limit:null + Data Bytes Sent:7 + Planning Time:1 END PLAN DEBUG LOG : ============================================================================ USER COMMAND: SELECT salesforce.Contact.Id FROM salesforce.Contact LIMIT ?, ? ---------------------------------------------------------------------------- OPTIMIZE: SELECT salesforce.Contact.Id FROM salesforce.Contact LIMIT ?, ? ---------------------------------------------------------------------------- GENERATE CANONICAL: SELECT salesforce.Contact.Id FROM salesforce.Contact LIMIT ?, ? CANONICAL PLAN: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=?, MAX_TUPLE_LIMIT=?}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id]}) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING PlaceAccess AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=?, MAX_TUPLE_LIMIT=?}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id]}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000}) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING RaiseAccess AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=?, MAX_TUPLE_LIMIT=null}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000}) TupleLimit(groups=[], props={MAX_TUPLE_LIMIT=(? + ?), OUTPUT_COLS=null}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id]}) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING AssignOutputElements AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=?, MAX_TUPLE_LIMIT=null, OUTPUT_COLS=[salesforce.Contact.Id]}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000, OUTPUT_COLS=[salesforce.Contact.Id]}) TupleLimit(groups=[], props={MAX_TUPLE_LIMIT=(? + ?), OUTPUT_COLS=[salesforce.Contact.Id]}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id], OUTPUT_COLS=[salesforce.Contact.Id]}) Source(groups=[salesforce.Contact], props={OUTPUT_COLS=[salesforce.Contact.Id]}) ============================================================================ EXECUTING PushLimit AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=?, MAX_TUPLE_LIMIT=null, OUTPUT_COLS=[salesforce.Contact.Id]}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000, OUTPUT_COLS=[salesforce.Contact.Id]}) TupleLimit(groups=[]) Project(groups=[salesforce.Contact]) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING CalculateCost AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=?, MAX_TUPLE_LIMIT=null, OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=-1.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000, OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=-1.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}}) TupleLimit(groups=[], props={MAX_TUPLE_LIMIT=(? + ?), OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=-1.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id], OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=-1.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}}) Source(groups=[salesforce.Contact], props={OUTPUT_COLS=[salesforce.Contact.Id], EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}, EST_CARDINALITY=-1.0}) ============================================================================ EXECUTING PlanSubqueries AFTER: TupleLimit(groups=[]) Access(groups=[salesforce.Contact]) TupleLimit(groups=[]) Project(groups=[salesforce.Contact]) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING PlanSorts AFTER: TupleLimit(groups=[]) Access(groups=[salesforce.Contact]) TupleLimit(groups=[]) Project(groups=[salesforce.Contact]) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING CollapseSource AFTER: TupleLimit(groups=[]) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000, OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=-1.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}, ATOMIC_REQUEST=SELECT salesforce.Contact.Id FROM salesforce.Contact LIMIT (? + ?)}) ============================================================================ CONVERTING PLAN TREE TO PROCESS TREE PROCESS PLAN = LimitNode(0) output=[salesforce.Contact.Id] offset ? AccessNode(1) output=[salesforce.Contact.Id] SELECT g_0.Id FROM salesforce.Contact AS g_0 LIMIT (? + ?) ============================================================================ ---------------------------------------------------------------------------- OPTIMIZATION COMPLETE: PROCESSOR PLAN: LimitNode(0) output=[salesforce.Contact.Id] offset ? AccessNode(1) output=[salesforce.Contact.Id] SELECT g_0.Id FROM salesforce.Contact AS g_0 LIMIT (? + ?) ============================================================================ END DEBUG LOG
Plan for nested parameters
SELECT Id FROM Contact LIMIT 5 OFFSET 10
PLAN: LimitNode + Relational Node ID:0 + Output Columns:Id (string) + Cost Estimates:Estimated Node Cardinality: 5.0 + Child 0: AccessNode + Relational Node ID:1 + Output Columns:Id (string) + Cost Estimates:Estimated Node Cardinality: 15.0 + Query:SELECT g_0.Id FROM salesforce.Contact AS g_0 LIMIT 15 + Model Name:salesforce + Row Offset:10 + Row Limit:null + Data Bytes Sent:7 + Planning Time:4 END PLAN DEBUG LOG : ============================================================================ USER COMMAND: SELECT salesforce.Contact.Id FROM salesforce.Contact LIMIT 10, 5 ---------------------------------------------------------------------------- OPTIMIZE: SELECT salesforce.Contact.Id FROM salesforce.Contact LIMIT 10, 5 ---------------------------------------------------------------------------- GENERATE CANONICAL: SELECT salesforce.Contact.Id FROM salesforce.Contact LIMIT 10, 5 CANONICAL PLAN: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=10, MAX_TUPLE_LIMIT=5}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id]}) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING PlaceAccess AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=10, MAX_TUPLE_LIMIT=5}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id]}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000}) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING RaiseAccess AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=10, MAX_TUPLE_LIMIT=null}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000}) TupleLimit(groups=[], props={MAX_TUPLE_LIMIT=15, OUTPUT_COLS=null}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id]}) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING AssignOutputElements AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=10, MAX_TUPLE_LIMIT=null, OUTPUT_COLS=[salesforce.Contact.Id]}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000, OUTPUT_COLS=[salesforce.Contact.Id]}) TupleLimit(groups=[], props={MAX_TUPLE_LIMIT=15, OUTPUT_COLS=[salesforce.Contact.Id]}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id], OUTPUT_COLS=[salesforce.Contact.Id]}) Source(groups=[salesforce.Contact], props={OUTPUT_COLS=[salesforce.Contact.Id]}) ============================================================================ EXECUTING PushLimit AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=10, MAX_TUPLE_LIMIT=null, OUTPUT_COLS=[salesforce.Contact.Id]}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000, OUTPUT_COLS=[salesforce.Contact.Id]}) TupleLimit(groups=[]) Project(groups=[salesforce.Contact]) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING CalculateCost AFTER: TupleLimit(groups=[], props={OFFSET_TUPLE_COUNT=10, MAX_TUPLE_LIMIT=null, OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=5.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}}) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000, OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=15.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}}) TupleLimit(groups=[], props={MAX_TUPLE_LIMIT=15, OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=15.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}}) Project(groups=[salesforce.Contact], props={PROJECT_COLS=[salesforce.Contact.Id], OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=-1.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}}) Source(groups=[salesforce.Contact], props={OUTPUT_COLS=[salesforce.Contact.Id], EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}, EST_CARDINALITY=-1.0}) ============================================================================ EXECUTING PlanSubqueries AFTER: TupleLimit(groups=[]) Access(groups=[salesforce.Contact]) TupleLimit(groups=[]) Project(groups=[salesforce.Contact]) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING PlanSorts AFTER: TupleLimit(groups=[]) Access(groups=[salesforce.Contact]) TupleLimit(groups=[]) Project(groups=[salesforce.Contact]) Source(groups=[salesforce.Contact]) ============================================================================ EXECUTING CollapseSource AFTER: TupleLimit(groups=[]) Access(groups=[salesforce.Contact], props={SOURCE_HINT=null, MODEL_ID=Schema name=salesforce, nameInSource=null, uuid=tid:6b7918e394e2-66cf095f-00000000, OUTPUT_COLS=[salesforce.Contact.Id], EST_CARDINALITY=15.0, EST_COL_STATS={salesforce.Contact.Id=[-1.0, -1.0, -1.0]}, ATOMIC_REQUEST=SELECT salesforce.Contact.Id FROM salesforce.Contact LIMIT 15}) ============================================================================ CONVERTING PLAN TREE TO PROCESS TREE PROCESS PLAN = LimitNode(0) output=[salesforce.Contact.Id] offset 10 AccessNode(1) output=[salesforce.Contact.Id] SELECT g_0.Id FROM salesforce.Contact AS g_0 LIMIT 15 ============================================================================ ---------------------------------------------------------------------------- OPTIMIZATION COMPLETE: PROCESSOR PLAN: LimitNode(0) output=[salesforce.Contact.Id] offset 10 AccessNode(1) output=[salesforce.Contact.Id] SELECT g_0.Id FROM salesforce.Contact AS g_0 LIMIT 15 ============================================================================ END DEBUG LOG
We used teiid 16.0.1-SNAPSHOT