Merge lp:~mmcm/akiban-server/operator-pipeline-options into lp:~akiban-technologies/akiban-server/trunk
- operator-pipeline-options
- Merge into trunk
Proposed by
Mike McMahon
Status: | Merged |
---|---|
Approved by: | Nathan Williams |
Approved revision: | 2732 |
Merged at revision: | 2694 |
Proposed branch: | lp:~mmcm/akiban-server/operator-pipeline-options |
Merge into: | lp:~akiban-technologies/akiban-server/trunk |
Diff against target: |
630 lines (+175/-34) 19 files modified
src/main/java/com/akiban/qp/operator/API.java (+3/-1) src/main/java/com/akiban/qp/operator/Map_NestedLoops.java (+14/-4) src/main/java/com/akiban/server/explain/Label.java (+1/-0) src/main/java/com/akiban/sql/optimizer/rule/OperatorAssembler.java (+1/-0) src/main/java/com/akiban/sql/optimizer/rule/PipelineConfiguration.java (+67/-0) src/main/java/com/akiban/sql/optimizer/rule/SchemaRulesContext.java (+11/-0) src/main/java/com/akiban/sql/server/ServerOperatorCompiler.java (+1/-0) src/main/java/com/akiban/sql/server/ServerSession.java (+4/-0) src/main/java/com/akiban/sql/server/ServerSessionBase.java (+10/-0) src/test/java/com/akiban/server/test/ApiTestBase.java (+4/-0) src/test/java/com/akiban/server/test/costmodel/MapCT.java (+2/-1) src/test/java/com/akiban/server/test/it/qp/AncestorLookup_NestedIT.java (+8/-8) src/test/java/com/akiban/server/test/it/qp/BranchLookup_NestedIT.java (+8/-8) src/test/java/com/akiban/server/test/it/qp/Map_NestedLoopsIT.java (+10/-10) src/test/java/com/akiban/server/test/it/qp/Map_NestedLoopsPipelineIT.java (+26/-0) src/test/java/com/akiban/server/test/it/qp/Sort_InsertionLimitedIT.java (+1/-1) src/test/java/com/akiban/server/test/it/qp/UnionAll_DefaultIT.java (+1/-1) src/test/java/com/akiban/sql/optimizer/OperatorCompilerTest.java (+2/-0) src/test/java/com/akiban/sql/optimizer/rule/RulesTestContext.java (+1/-0) |
To merge this branch: | bzr merge lp:~mmcm/akiban-server/operator-pipeline-options |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Nathan Williams | Approve | ||
Review via email: mp+174585@code.launchpad.net |
Commit message
Description of the change
Change how operators get pipeline-related options.
Instead of having each operator look into config properties, set them from the optimizer, which in turn gets them all at once from there.
Add an option for Map_NestedLoops to select the previous rebinding implementation. Make this the default, since there are issues with query cancelation with pipelining.
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/main/java/com/akiban/qp/operator/API.java' | |||
2 | --- src/main/java/com/akiban/qp/operator/API.java 2013-07-10 18:42:14 +0000 | |||
3 | +++ src/main/java/com/akiban/qp/operator/API.java 2013-07-13 21:55:29 +0000 | |||
4 | @@ -497,9 +497,11 @@ | |||
5 | 497 | public static Operator map_NestedLoops(Operator outerInput, | 497 | public static Operator map_NestedLoops(Operator outerInput, |
6 | 498 | Operator innerInput, | 498 | Operator innerInput, |
7 | 499 | int inputBindingPosition, | 499 | int inputBindingPosition, |
8 | 500 | boolean pipeline, | ||
9 | 500 | int depth) | 501 | int depth) |
10 | 501 | { | 502 | { |
12 | 502 | return new Map_NestedLoops(outerInput, innerInput, inputBindingPosition, depth); | 503 | return new Map_NestedLoops(outerInput, innerInput, inputBindingPosition, |
13 | 504 | pipeline, depth); | ||
14 | 503 | } | 505 | } |
15 | 504 | 506 | ||
16 | 505 | // IfEmpty | 507 | // IfEmpty |
17 | 506 | 508 | ||
18 | === modified file 'src/main/java/com/akiban/qp/operator/Map_NestedLoops.java' | |||
19 | --- src/main/java/com/akiban/qp/operator/Map_NestedLoops.java 2013-07-10 21:30:34 +0000 | |||
20 | +++ src/main/java/com/akiban/qp/operator/Map_NestedLoops.java 2013-07-13 21:55:29 +0000 | |||
21 | @@ -51,6 +51,8 @@ | |||
22 | 51 | 51 | ||
23 | 52 | <li><b>int inputBindingPosition:</b> Position of inner loop row in query context. | 52 | <li><b>int inputBindingPosition:</b> Position of inner loop row in query context. |
24 | 53 | 53 | ||
25 | 54 | <li><b>boolean pipeline:</b> Whether to use bracketing cursors instead of rebinding. | ||
26 | 55 | |||
27 | 54 | <li><b>int depth:</b> Number of nested Maps, including this one. | 56 | <li><b>int depth:</b> Number of nested Maps, including this one. |
28 | 55 | 57 | ||
29 | 56 | </ul> | 58 | </ul> |
30 | @@ -90,7 +92,7 @@ | |||
31 | 90 | @Override | 92 | @Override |
32 | 91 | protected Cursor cursor(QueryContext context, QueryBindingsCursor bindingsCursor) | 93 | protected Cursor cursor(QueryContext context, QueryBindingsCursor bindingsCursor) |
33 | 92 | { | 94 | { |
35 | 93 | if (false) | 95 | if (!pipeline) |
36 | 94 | return new Execution(context, bindingsCursor); // Old-style | 96 | return new Execution(context, bindingsCursor); // Old-style |
37 | 95 | else { | 97 | else { |
38 | 96 | Cursor outerCursor = outerInputOperator.cursor(context, bindingsCursor); | 98 | Cursor outerCursor = outerInputOperator.cursor(context, bindingsCursor); |
39 | @@ -127,6 +129,7 @@ | |||
40 | 127 | public Map_NestedLoops(Operator outerInputOperator, | 129 | public Map_NestedLoops(Operator outerInputOperator, |
41 | 128 | Operator innerInputOperator, | 130 | Operator innerInputOperator, |
42 | 129 | int inputBindingPosition, | 131 | int inputBindingPosition, |
43 | 132 | boolean pipeline, | ||
44 | 130 | int depth) | 133 | int depth) |
45 | 131 | { | 134 | { |
46 | 132 | ArgumentValidation.notNull("outerInputOperator", outerInputOperator); | 135 | ArgumentValidation.notNull("outerInputOperator", outerInputOperator); |
47 | @@ -136,6 +139,7 @@ | |||
48 | 136 | this.outerInputOperator = outerInputOperator; | 139 | this.outerInputOperator = outerInputOperator; |
49 | 137 | this.innerInputOperator = innerInputOperator; | 140 | this.innerInputOperator = innerInputOperator; |
50 | 138 | this.inputBindingPosition = inputBindingPosition; | 141 | this.inputBindingPosition = inputBindingPosition; |
51 | 142 | this.pipeline = pipeline; | ||
52 | 139 | this.depth = depth; | 143 | this.depth = depth; |
53 | 140 | } | 144 | } |
54 | 141 | 145 | ||
55 | @@ -150,12 +154,14 @@ | |||
56 | 150 | private final Operator outerInputOperator; | 154 | private final Operator outerInputOperator; |
57 | 151 | private final Operator innerInputOperator; | 155 | private final Operator innerInputOperator; |
58 | 152 | private final int inputBindingPosition, depth; | 156 | private final int inputBindingPosition, depth; |
59 | 157 | private final boolean pipeline; | ||
60 | 153 | 158 | ||
61 | 154 | @Override | 159 | @Override |
62 | 155 | public CompoundExplainer getExplainer(ExplainContext context) | 160 | public CompoundExplainer getExplainer(ExplainContext context) |
63 | 156 | { | 161 | { |
64 | 157 | CompoundExplainer ex = new NestedLoopsExplainer(getName(), innerInputOperator, outerInputOperator, null, null, context); | 162 | CompoundExplainer ex = new NestedLoopsExplainer(getName(), innerInputOperator, outerInputOperator, null, null, context); |
65 | 158 | ex.addAttribute(Label.BINDING_POSITION, PrimitiveExplainer.getInstance(inputBindingPosition)); | 163 | ex.addAttribute(Label.BINDING_POSITION, PrimitiveExplainer.getInstance(inputBindingPosition)); |
66 | 164 | ex.addAttribute(Label.PIPELINE, PrimitiveExplainer.getInstance(pipeline)); | ||
67 | 159 | ex.addAttribute(Label.DEPTH, PrimitiveExplainer.getInstance(depth)); | 165 | ex.addAttribute(Label.DEPTH, PrimitiveExplainer.getInstance(depth)); |
68 | 160 | if (context.hasExtraInfo(this)) | 166 | if (context.hasExtraInfo(this)) |
69 | 161 | ex.get().putAll(context.getExtraInfo(this).get()); | 167 | ex.get().putAll(context.getExtraInfo(this).get()); |
70 | @@ -346,9 +352,13 @@ | |||
71 | 346 | pendingBindings = null; | 352 | pendingBindings = null; |
72 | 347 | return bindings; | 353 | return bindings; |
73 | 348 | } | 354 | } |
77 | 349 | bindings = input.nextBindings(); | 355 | while (true) { |
78 | 350 | assert ((bindings == null) || (bindings.getDepth() < depth)); | 356 | // Skip over any that we would elide. |
79 | 351 | return bindings; | 357 | bindings = input.nextBindings(); |
80 | 358 | if ((bindings == null) || (bindings.getDepth() < depth)) | ||
81 | 359 | return bindings; | ||
82 | 360 | assert (bindings.getDepth() == depth); | ||
83 | 361 | } | ||
84 | 352 | } | 362 | } |
85 | 353 | 363 | ||
86 | 354 | @Override | 364 | @Override |
87 | 355 | 365 | ||
88 | === modified file 'src/main/java/com/akiban/server/explain/Label.java' | |||
89 | --- src/main/java/com/akiban/server/explain/Label.java 2013-07-10 18:42:14 +0000 | |||
90 | +++ src/main/java/com/akiban/server/explain/Label.java 2013-07-13 21:55:29 +0000 | |||
91 | @@ -48,6 +48,7 @@ | |||
92 | 48 | INFIX_REPRESENTATION(Category.DESCRIPTION), | 48 | INFIX_REPRESENTATION(Category.DESCRIPTION), |
93 | 49 | ASSOCIATIVE(Category.DESCRIPTION), | 49 | ASSOCIATIVE(Category.DESCRIPTION), |
94 | 50 | INDEX(Category.DESCRIPTION), | 50 | INDEX(Category.DESCRIPTION), |
95 | 51 | PIPELINE(Category.DESCRIPTION), | ||
96 | 51 | DEPTH(Category.DESCRIPTION), | 52 | DEPTH(Category.DESCRIPTION), |
97 | 52 | 53 | ||
98 | 53 | // IDENTIFIER | 54 | // IDENTIFIER |
99 | 54 | 55 | ||
100 | === modified file 'src/main/java/com/akiban/sql/optimizer/rule/OperatorAssembler.java' | |||
101 | --- src/main/java/com/akiban/sql/optimizer/rule/OperatorAssembler.java 2013-07-10 18:42:14 +0000 | |||
102 | +++ src/main/java/com/akiban/sql/optimizer/rule/OperatorAssembler.java 2013-07-13 21:55:29 +0000 | |||
103 | @@ -1529,6 +1529,7 @@ | |||
104 | 1529 | stream.operator = API.map_NestedLoops(ostream.operator, | 1529 | stream.operator = API.map_NestedLoops(ostream.operator, |
105 | 1530 | stream.operator, | 1530 | stream.operator, |
106 | 1531 | currentBindingPosition(), | 1531 | currentBindingPosition(), |
107 | 1532 | rulesContext.getPipelineConfiguration().isMapEnabled(), | ||
108 | 1532 | nestedBindingsDepth); | 1533 | nestedBindingsDepth); |
109 | 1533 | nestedBindingsDepth--; | 1534 | nestedBindingsDepth--; |
110 | 1534 | popBoundRow(); | 1535 | popBoundRow(); |
111 | 1535 | 1536 | ||
112 | === added file 'src/main/java/com/akiban/sql/optimizer/rule/PipelineConfiguration.java' | |||
113 | --- src/main/java/com/akiban/sql/optimizer/rule/PipelineConfiguration.java 1970-01-01 00:00:00 +0000 | |||
114 | +++ src/main/java/com/akiban/sql/optimizer/rule/PipelineConfiguration.java 2013-07-13 21:55:29 +0000 | |||
115 | @@ -0,0 +1,67 @@ | |||
116 | 1 | /** | ||
117 | 2 | * Copyright (C) 2009-2013 Akiban Technologies, Inc. | ||
118 | 3 | * | ||
119 | 4 | * This program is free software: you can redistribute it and/or modify | ||
120 | 5 | * it under the terms of the GNU Affero General Public License as published by | ||
121 | 6 | * the Free Software Foundation, either version 3 of the License, or | ||
122 | 7 | * (at your option) any later version. | ||
123 | 8 | * | ||
124 | 9 | * This program is distributed in the hope that it will be useful, | ||
125 | 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
126 | 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
127 | 12 | * GNU Affero General Public License for more details. | ||
128 | 13 | * | ||
129 | 14 | * You should have received a copy of the GNU Affero General Public License | ||
130 | 15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
131 | 16 | */ | ||
132 | 17 | |||
133 | 18 | package com.akiban.sql.optimizer.rule; | ||
134 | 19 | |||
135 | 20 | import java.util.Properties; | ||
136 | 21 | |||
137 | 22 | public class PipelineConfiguration | ||
138 | 23 | { | ||
139 | 24 | private boolean mapEnabled = false; | ||
140 | 25 | private int indexScanLookaheadQuantum = 1; | ||
141 | 26 | private int groupLookupLookaheadQuantum = 1; | ||
142 | 27 | private boolean unionAllOpenBoth = false; | ||
143 | 28 | |||
144 | 29 | public PipelineConfiguration() { | ||
145 | 30 | } | ||
146 | 31 | |||
147 | 32 | public PipelineConfiguration(Properties properties) { | ||
148 | 33 | load(properties); | ||
149 | 34 | } | ||
150 | 35 | |||
151 | 36 | public boolean isMapEnabled() { | ||
152 | 37 | return mapEnabled; | ||
153 | 38 | } | ||
154 | 39 | |||
155 | 40 | public int getIndexScanLookaheadQuantum() { | ||
156 | 41 | return indexScanLookaheadQuantum; | ||
157 | 42 | } | ||
158 | 43 | |||
159 | 44 | public int getGroupLookupLookaheadQuantum() { | ||
160 | 45 | return groupLookupLookaheadQuantum; | ||
161 | 46 | } | ||
162 | 47 | |||
163 | 48 | public boolean isUnionAllOpenBoth() { | ||
164 | 49 | return unionAllOpenBoth; | ||
165 | 50 | } | ||
166 | 51 | |||
167 | 52 | public void load(Properties properties) { | ||
168 | 53 | for (String prop : properties.stringPropertyNames()) { | ||
169 | 54 | String val = properties.getProperty(prop); | ||
170 | 55 | if ("map.enabled".equals(prop)) | ||
171 | 56 | mapEnabled = Boolean.parseBoolean(val); | ||
172 | 57 | else if ("indexScan.lookaheadQuantum".equals(prop)) | ||
173 | 58 | indexScanLookaheadQuantum = Integer.parseInt(val); | ||
174 | 59 | else if ("groupLookup.lookaheadQuantum".equals(prop)) | ||
175 | 60 | groupLookupLookaheadQuantum = Integer.parseInt(val); | ||
176 | 61 | else if ("unionAll.openBoth".equals(prop)) | ||
177 | 62 | unionAllOpenBoth = Boolean.parseBoolean(val); | ||
178 | 63 | else | ||
179 | 64 | throw new IllegalArgumentException("Unknown property " + prop); | ||
180 | 65 | } | ||
181 | 66 | } | ||
182 | 67 | } | ||
183 | 0 | 68 | ||
184 | === modified file 'src/main/java/com/akiban/sql/optimizer/rule/SchemaRulesContext.java' | |||
185 | --- src/main/java/com/akiban/sql/optimizer/rule/SchemaRulesContext.java 2013-03-22 20:05:57 +0000 | |||
186 | +++ src/main/java/com/akiban/sql/optimizer/rule/SchemaRulesContext.java 2013-07-13 21:55:29 +0000 | |||
187 | @@ -36,6 +36,8 @@ | |||
188 | 36 | private FunctionsRegistry functionsRegistry; | 36 | private FunctionsRegistry functionsRegistry; |
189 | 37 | private CostEstimator costEstimator; | 37 | private CostEstimator costEstimator; |
190 | 38 | private T3RegistryService t3Registry; | 38 | private T3RegistryService t3Registry; |
191 | 39 | private PipelineConfiguration pipelineConfiguration; | ||
192 | 40 | |||
193 | 39 | protected SchemaRulesContext() { | 41 | protected SchemaRulesContext() { |
194 | 40 | } | 42 | } |
195 | 41 | 43 | ||
196 | @@ -55,12 +57,17 @@ | |||
197 | 55 | this.costEstimator = costEstimator; | 57 | this.costEstimator = costEstimator; |
198 | 56 | } | 58 | } |
199 | 57 | 59 | ||
200 | 60 | protected void initPipelineConfiguration(PipelineConfiguration pipelineConfiguration) { | ||
201 | 61 | this.pipelineConfiguration = pipelineConfiguration; | ||
202 | 62 | } | ||
203 | 63 | |||
204 | 58 | @Override | 64 | @Override |
205 | 59 | protected void initDone() { | 65 | protected void initDone() { |
206 | 60 | super.initDone(); | 66 | super.initDone(); |
207 | 61 | assert (schema != null) : "initSchema() not called"; | 67 | assert (schema != null) : "initSchema() not called"; |
208 | 62 | assert (functionsRegistry != null) : "initFunctionsRegistry() not called"; | 68 | assert (functionsRegistry != null) : "initFunctionsRegistry() not called"; |
209 | 63 | assert (costEstimator != null) : "initCostEstimator() not called"; | 69 | assert (costEstimator != null) : "initCostEstimator() not called"; |
210 | 70 | assert (pipelineConfiguration != null) : "initPipelineConfiguration() not called"; | ||
211 | 64 | } | 71 | } |
212 | 65 | 72 | ||
213 | 66 | public Schema getSchema() { | 73 | public Schema getSchema() { |
214 | @@ -89,4 +96,8 @@ | |||
215 | 89 | 96 | ||
216 | 90 | public abstract String getDefaultSchemaName(); | 97 | public abstract String getDefaultSchemaName(); |
217 | 91 | 98 | ||
218 | 99 | public PipelineConfiguration getPipelineConfiguration() { | ||
219 | 100 | return pipelineConfiguration; | ||
220 | 101 | } | ||
221 | 102 | |||
222 | 92 | } | 103 | } |
223 | 93 | 104 | ||
224 | === modified file 'src/main/java/com/akiban/sql/server/ServerOperatorCompiler.java' | |||
225 | --- src/main/java/com/akiban/sql/server/ServerOperatorCompiler.java 2013-06-11 16:30:17 +0000 | |||
226 | +++ src/main/java/com/akiban/sql/server/ServerOperatorCompiler.java 2013-07-13 21:55:29 +0000 | |||
227 | @@ -36,6 +36,7 @@ | |||
228 | 36 | initParser(server.getParser()); | 36 | initParser(server.getParser()); |
229 | 37 | initFunctionsRegistry(server.functionsRegistry()); | 37 | initFunctionsRegistry(server.functionsRegistry()); |
230 | 38 | initCostEstimator(server.costEstimator(this, keyCreator), usePValues); | 38 | initCostEstimator(server.costEstimator(this, keyCreator), usePValues); |
231 | 39 | initPipelineConfiguration(server.getPipelineConfiguration()); | ||
232 | 39 | if (usePValues) | 40 | if (usePValues) |
233 | 40 | initT3Registry(server.t3RegistryService()); | 41 | initT3Registry(server.t3RegistryService()); |
234 | 41 | 42 | ||
235 | 42 | 43 | ||
236 | === modified file 'src/main/java/com/akiban/sql/server/ServerSession.java' | |||
237 | --- src/main/java/com/akiban/sql/server/ServerSession.java 2013-06-11 16:32:59 +0000 | |||
238 | +++ src/main/java/com/akiban/sql/server/ServerSession.java 2013-07-13 21:55:29 +0000 | |||
239 | @@ -23,6 +23,7 @@ | |||
240 | 23 | import com.akiban.sql.parser.SQLParser; | 23 | import com.akiban.sql.parser.SQLParser; |
241 | 24 | 24 | ||
242 | 25 | import com.akiban.sql.optimizer.AISBinderContext; | 25 | import com.akiban.sql.optimizer.AISBinderContext; |
243 | 26 | import com.akiban.sql.optimizer.rule.PipelineConfiguration; | ||
244 | 26 | import com.akiban.sql.optimizer.rule.cost.CostEstimator; | 27 | import com.akiban.sql.optimizer.rule.cost.CostEstimator; |
245 | 27 | 28 | ||
246 | 28 | import com.akiban.ais.model.AkibanInformationSchema; | 29 | import com.akiban.ais.model.AkibanInformationSchema; |
247 | @@ -165,4 +166,7 @@ | |||
248 | 165 | 166 | ||
249 | 166 | /** Check access to given schema */ | 167 | /** Check access to given schema */ |
250 | 167 | public boolean isSchemaAccessible(String schemaName); | 168 | public boolean isSchemaAccessible(String schemaName); |
251 | 169 | |||
252 | 170 | /** Get the pipeline configuration. */ | ||
253 | 171 | public PipelineConfiguration getPipelineConfiguration(); | ||
254 | 168 | } | 172 | } |
255 | 169 | 173 | ||
256 | === modified file 'src/main/java/com/akiban/sql/server/ServerSessionBase.java' | |||
257 | --- src/main/java/com/akiban/sql/server/ServerSessionBase.java 2013-06-12 21:51:17 +0000 | |||
258 | +++ src/main/java/com/akiban/sql/server/ServerSessionBase.java 2013-07-13 21:55:29 +0000 | |||
259 | @@ -40,6 +40,7 @@ | |||
260 | 40 | import com.akiban.server.service.tree.KeyCreator; | 40 | import com.akiban.server.service.tree.KeyCreator; |
261 | 41 | import com.akiban.server.t3expressions.T3RegistryService; | 41 | import com.akiban.server.t3expressions.T3RegistryService; |
262 | 42 | import com.akiban.sql.optimizer.AISBinderContext; | 42 | import com.akiban.sql.optimizer.AISBinderContext; |
263 | 43 | import com.akiban.sql.optimizer.rule.PipelineConfiguration; | ||
264 | 43 | import com.akiban.sql.optimizer.rule.cost.CostEstimator; | 44 | import com.akiban.sql.optimizer.rule.cost.CostEstimator; |
265 | 44 | 45 | ||
266 | 45 | import java.util.*; | 46 | import java.util.*; |
267 | @@ -47,10 +48,12 @@ | |||
268 | 47 | public abstract class ServerSessionBase extends AISBinderContext implements ServerSession | 48 | public abstract class ServerSessionBase extends AISBinderContext implements ServerSession |
269 | 48 | { | 49 | { |
270 | 49 | public static final String COMPILER_PROPERTIES_PREFIX = "optimizer."; | 50 | public static final String COMPILER_PROPERTIES_PREFIX = "optimizer."; |
271 | 51 | public static final String PIPELINE_PROPERTIES_PREFIX = "akserver.pipeline."; | ||
272 | 50 | 52 | ||
273 | 51 | protected final ServerServiceRequirements reqs; | 53 | protected final ServerServiceRequirements reqs; |
274 | 52 | protected Properties compilerProperties; | 54 | protected Properties compilerProperties; |
275 | 53 | protected Map<String,Object> attributes = new HashMap<>(); | 55 | protected Map<String,Object> attributes = new HashMap<>(); |
276 | 56 | protected PipelineConfiguration pipelineConfiguration; | ||
277 | 54 | 57 | ||
278 | 55 | protected Session session; | 58 | protected Session session; |
279 | 56 | protected Map<StoreAdapter.AdapterType, StoreAdapter> adapters = | 59 | protected Map<StoreAdapter.AdapterType, StoreAdapter> adapters = |
280 | @@ -401,4 +404,11 @@ | |||
281 | 401 | return reqs.securityService().isAccessible(session, schemaName); | 404 | return reqs.securityService().isAccessible(session, schemaName); |
282 | 402 | } | 405 | } |
283 | 403 | 406 | ||
284 | 407 | @Override | ||
285 | 408 | public PipelineConfiguration getPipelineConfiguration() { | ||
286 | 409 | if (pipelineConfiguration == null) | ||
287 | 410 | pipelineConfiguration = new PipelineConfiguration(reqs.config().deriveProperties(PIPELINE_PROPERTIES_PREFIX)); | ||
288 | 411 | return pipelineConfiguration; | ||
289 | 412 | } | ||
290 | 413 | |||
291 | 404 | } | 414 | } |
292 | 405 | 415 | ||
293 | === modified file 'src/test/java/com/akiban/server/test/ApiTestBase.java' | |||
294 | --- src/test/java/com/akiban/server/test/ApiTestBase.java 2013-07-03 15:32:40 +0000 | |||
295 | +++ src/test/java/com/akiban/server/test/ApiTestBase.java 2013-07-13 21:55:29 +0000 | |||
296 | @@ -1353,6 +1353,10 @@ | |||
297 | 1353 | return true; | 1353 | return true; |
298 | 1354 | } | 1354 | } |
299 | 1355 | 1355 | ||
300 | 1356 | protected boolean pipelineMap() { | ||
301 | 1357 | return false; | ||
302 | 1358 | } | ||
303 | 1359 | |||
304 | 1356 | protected DDLFunctions ddlForAlter() { | 1360 | protected DDLFunctions ddlForAlter() { |
305 | 1357 | return ddl(); | 1361 | return ddl(); |
306 | 1358 | } | 1362 | } |
307 | 1359 | 1363 | ||
308 | === modified file 'src/test/java/com/akiban/server/test/costmodel/MapCT.java' | |||
309 | --- src/test/java/com/akiban/server/test/costmodel/MapCT.java 2013-07-10 18:42:14 +0000 | |||
310 | +++ src/test/java/com/akiban/server/test/costmodel/MapCT.java 2013-07-13 21:55:29 +0000 | |||
311 | @@ -83,7 +83,8 @@ | |||
312 | 83 | TimeOperator timeSetupOuter = new TimeOperator(setupOuter); | 83 | TimeOperator timeSetupOuter = new TimeOperator(setupOuter); |
313 | 84 | Operator setupInner = limit_Default(groupScan_Default(group), innerRows); | 84 | Operator setupInner = limit_Default(groupScan_Default(group), innerRows); |
314 | 85 | TimeOperator timeSetupInner = new TimeOperator(setupInner); | 85 | TimeOperator timeSetupInner = new TimeOperator(setupInner); |
316 | 86 | Operator plan = map_NestedLoops(timeSetupOuter, timeSetupInner, 0, 1); | 86 | Operator plan = map_NestedLoops(timeSetupOuter, timeSetupInner, |
317 | 87 | 0, pipelineMap(), 1); | ||
318 | 87 | long start = System.nanoTime(); | 88 | long start = System.nanoTime(); |
319 | 88 | for (int r = 0; r < runs; r++) { | 89 | for (int r = 0; r < runs; r++) { |
320 | 89 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 90 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
321 | 90 | 91 | ||
322 | === modified file 'src/test/java/com/akiban/server/test/it/qp/AncestorLookup_NestedIT.java' | |||
323 | --- src/test/java/com/akiban/server/test/it/qp/AncestorLookup_NestedIT.java 2013-07-10 21:30:34 +0000 | |||
324 | +++ src/test/java/com/akiban/server/test/it/qp/AncestorLookup_NestedIT.java 2013-07-13 21:55:29 +0000 | |||
325 | @@ -141,7 +141,7 @@ | |||
326 | 141 | map_NestedLoops( | 141 | map_NestedLoops( |
327 | 142 | indexScan_Default(aValueIndexRowType), | 142 | indexScan_Default(aValueIndexRowType), |
328 | 143 | ancestorLookup_Nested(rabc, aValueIndexRowType, Collections.singleton(aRowType), 0), | 143 | ancestorLookup_Nested(rabc, aValueIndexRowType, Collections.singleton(aRowType), 0), |
330 | 144 | 0, 1); | 144 | 0, pipelineMap(), 1); |
331 | 145 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 145 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
332 | 146 | RowBase[] expected = new RowBase[]{ | 146 | RowBase[] expected = new RowBase[]{ |
333 | 147 | row(aRowType, 13L, 1L, "a13"), | 147 | row(aRowType, 13L, 1L, "a13"), |
334 | @@ -159,7 +159,7 @@ | |||
335 | 159 | map_NestedLoops( | 159 | map_NestedLoops( |
336 | 160 | indexScan_Default(aValueIndexRowType), | 160 | indexScan_Default(aValueIndexRowType), |
337 | 161 | ancestorLookup_Nested(rabc, aValueIndexRowType, Arrays.asList(aRowType, rRowType), 0), | 161 | ancestorLookup_Nested(rabc, aValueIndexRowType, Arrays.asList(aRowType, rRowType), 0), |
339 | 162 | 0, 1); | 162 | 0, pipelineMap(), 1); |
340 | 163 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 163 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
341 | 164 | RowBase[] expected = new RowBase[]{ | 164 | RowBase[] expected = new RowBase[]{ |
342 | 165 | row(rRowType, 1L, "r1"), | 165 | row(rRowType, 1L, "r1"), |
343 | @@ -181,7 +181,7 @@ | |||
344 | 181 | map_NestedLoops( | 181 | map_NestedLoops( |
345 | 182 | indexScan_Default(aValueIndexRowType), | 182 | indexScan_Default(aValueIndexRowType), |
346 | 183 | ancestorLookup_Nested(rabc, aValueIndexRowType, Arrays.asList(rRowType, aRowType), 0), | 183 | ancestorLookup_Nested(rabc, aValueIndexRowType, Arrays.asList(rRowType, aRowType), 0), |
348 | 184 | 0, 1); | 184 | 0, pipelineMap(), 1); |
349 | 185 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 185 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
350 | 186 | RowBase[] expected = new RowBase[]{ | 186 | RowBase[] expected = new RowBase[]{ |
351 | 187 | row(rRowType, 1L, "r1"), | 187 | row(rRowType, 1L, "r1"), |
352 | @@ -204,9 +204,9 @@ | |||
353 | 204 | map_NestedLoops( | 204 | map_NestedLoops( |
354 | 205 | indexScan_Default(aValueIndexRowType), | 205 | indexScan_Default(aValueIndexRowType), |
355 | 206 | ancestorLookup_Nested(rabc, aValueIndexRowType, Arrays.asList(aRowType), 0), | 206 | ancestorLookup_Nested(rabc, aValueIndexRowType, Arrays.asList(aRowType), 0), |
357 | 207 | 0, 1), | 207 | 0, pipelineMap(), 1), |
358 | 208 | ancestorLookup_Nested(rabc, aRowType, Arrays.asList(rRowType), 1), | 208 | ancestorLookup_Nested(rabc, aRowType, Arrays.asList(rRowType), 1), |
360 | 209 | 1, 1); | 209 | 1, pipelineMap(), 1); |
361 | 210 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 210 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
362 | 211 | RowBase[] expected = new RowBase[]{ | 211 | RowBase[] expected = new RowBase[]{ |
363 | 212 | row(rRowType, 1L, "r1"), | 212 | row(rRowType, 1L, "r1"), |
364 | @@ -236,7 +236,7 @@ | |||
365 | 236 | map_NestedLoops( | 236 | map_NestedLoops( |
366 | 237 | abIndexScan, | 237 | abIndexScan, |
367 | 238 | ancestorLookup_Nested(rabc, abIndexScan.rowType(), Collections.singleton(rRowType), 0), | 238 | ancestorLookup_Nested(rabc, abIndexScan.rowType(), Collections.singleton(rRowType), 0), |
369 | 239 | 0, 1); | 239 | 0, pipelineMap(), 1); |
370 | 240 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 240 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
371 | 241 | RowBase[] expected = new RowBase[]{ | 241 | RowBase[] expected = new RowBase[]{ |
372 | 242 | row(rRowType, 1L, "r1"), | 242 | row(rRowType, 1L, "r1"), |
373 | @@ -272,7 +272,7 @@ | |||
374 | 272 | map_NestedLoops( | 272 | map_NestedLoops( |
375 | 273 | abcIndexScan, | 273 | abcIndexScan, |
376 | 274 | ancestorLookup_Nested(rabc, abcIndexScan.rowType(), Collections.singleton(rRowType), 0), | 274 | ancestorLookup_Nested(rabc, abcIndexScan.rowType(), Collections.singleton(rRowType), 0), |
378 | 275 | 0, 1); | 275 | 0, pipelineMap(), 1); |
379 | 276 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 276 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
380 | 277 | RowBase[] expected = new RowBase[]{ | 277 | RowBase[] expected = new RowBase[]{ |
381 | 278 | row(rRowType, 1L, "r1"), | 278 | row(rRowType, 1L, "r1"), |
382 | @@ -287,7 +287,7 @@ | |||
383 | 287 | map_NestedLoops( | 287 | map_NestedLoops( |
384 | 288 | indexScan_Default(aValueIndexRowType), | 288 | indexScan_Default(aValueIndexRowType), |
385 | 289 | ancestorLookup_Nested(rabc, aValueIndexRowType, Collections.singleton(aRowType), 0), | 289 | ancestorLookup_Nested(rabc, aValueIndexRowType, Collections.singleton(aRowType), 0), |
387 | 290 | 0, 1); | 290 | 0, pipelineMap(), 1); |
388 | 291 | CursorLifecycleTestCase testCase = new CursorLifecycleTestCase() | 291 | CursorLifecycleTestCase testCase = new CursorLifecycleTestCase() |
389 | 292 | { | 292 | { |
390 | 293 | @Override | 293 | @Override |
391 | 294 | 294 | ||
392 | === modified file 'src/test/java/com/akiban/server/test/it/qp/BranchLookup_NestedIT.java' | |||
393 | --- src/test/java/com/akiban/server/test/it/qp/BranchLookup_NestedIT.java 2013-07-10 21:30:34 +0000 | |||
394 | +++ src/test/java/com/akiban/server/test/it/qp/BranchLookup_NestedIT.java 2013-07-13 21:55:29 +0000 | |||
395 | @@ -154,7 +154,7 @@ | |||
396 | 154 | map_NestedLoops( | 154 | map_NestedLoops( |
397 | 155 | indexScan_Default(aValueIndexRowType), | 155 | indexScan_Default(aValueIndexRowType), |
398 | 156 | branchLookup_Nested(rabc, aValueIndexRowType, rRowType, InputPreservationOption.DISCARD_INPUT, 0), | 156 | branchLookup_Nested(rabc, aValueIndexRowType, rRowType, InputPreservationOption.DISCARD_INPUT, 0), |
400 | 157 | 0, 1); | 157 | 0, pipelineMap(), 1); |
401 | 158 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 158 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
402 | 159 | RowBase[] expected = new RowBase[]{ | 159 | RowBase[] expected = new RowBase[]{ |
403 | 160 | // Each r row, and everything below it, is duplicated, because the A index refers to each r value twice. | 160 | // Each r row, and everything below it, is duplicated, because the A index refers to each r value twice. |
404 | @@ -202,7 +202,7 @@ | |||
405 | 202 | Collections.singleton(aRowType), | 202 | Collections.singleton(aRowType), |
406 | 203 | InputPreservationOption.DISCARD_INPUT), | 203 | InputPreservationOption.DISCARD_INPUT), |
407 | 204 | branchLookup_Nested(rabc, aRowType, rRowType, InputPreservationOption.DISCARD_INPUT, 0), | 204 | branchLookup_Nested(rabc, aRowType, rRowType, InputPreservationOption.DISCARD_INPUT, 0), |
409 | 205 | 0, 1); | 205 | 0, pipelineMap(), 1); |
410 | 206 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 206 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
411 | 207 | RowBase[] expected = new RowBase[]{ | 207 | RowBase[] expected = new RowBase[]{ |
412 | 208 | // Each r row, and everything below it, is duplicated, because the A index refers to each r value twice. | 208 | // Each r row, and everything below it, is duplicated, because the A index refers to each r value twice. |
413 | @@ -247,7 +247,7 @@ | |||
414 | 247 | groupScan_Default(rabc), | 247 | groupScan_Default(rabc), |
415 | 248 | Collections.singleton(aRowType)), | 248 | Collections.singleton(aRowType)), |
416 | 249 | branchLookup_Nested(rabc, aRowType, bRowType, InputPreservationOption.DISCARD_INPUT, 0), | 249 | branchLookup_Nested(rabc, aRowType, bRowType, InputPreservationOption.DISCARD_INPUT, 0), |
418 | 250 | 0, 1); | 250 | 0, pipelineMap(), 1); |
419 | 251 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 251 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
420 | 252 | RowBase[] expected = new RowBase[]{ | 252 | RowBase[] expected = new RowBase[]{ |
421 | 253 | row(bRowType, 15L, 1L, "b15"), | 253 | row(bRowType, 15L, 1L, "b15"), |
422 | @@ -272,9 +272,9 @@ | |||
423 | 272 | groupScan_Default(rabc), | 272 | groupScan_Default(rabc), |
424 | 273 | Collections.singleton(aRowType)), | 273 | Collections.singleton(aRowType)), |
425 | 274 | branchLookup_Nested(rabc, aRowType, bRowType, InputPreservationOption.DISCARD_INPUT, 0), | 274 | branchLookup_Nested(rabc, aRowType, bRowType, InputPreservationOption.DISCARD_INPUT, 0), |
427 | 275 | 0, 1), | 275 | 0, pipelineMap(), 1), |
428 | 276 | branchLookup_Nested(rabc, bRowType, cRowType, InputPreservationOption.KEEP_INPUT, 1), | 276 | branchLookup_Nested(rabc, bRowType, cRowType, InputPreservationOption.KEEP_INPUT, 1), |
430 | 277 | 1, 1); | 277 | 1, pipelineMap(), 1); |
431 | 278 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 278 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
432 | 279 | RowBase[] expected = new RowBase[]{ | 279 | RowBase[] expected = new RowBase[]{ |
433 | 280 | row(bRowType, 15L, 1L, "b15"), | 280 | row(bRowType, 15L, 1L, "b15"), |
434 | @@ -324,7 +324,7 @@ | |||
435 | 324 | map_NestedLoops( | 324 | map_NestedLoops( |
436 | 325 | abIndexScan, | 325 | abIndexScan, |
437 | 326 | branchLookup_Nested(rabc, abIndexScan.rowType(), cRowType, InputPreservationOption.DISCARD_INPUT, 0), | 326 | branchLookup_Nested(rabc, abIndexScan.rowType(), cRowType, InputPreservationOption.DISCARD_INPUT, 0), |
439 | 327 | 0, 1); | 327 | 0, pipelineMap(), 1); |
440 | 328 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 328 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
441 | 329 | RowBase[] expected = new RowBase[]{ | 329 | RowBase[] expected = new RowBase[]{ |
442 | 330 | row(cRowType, 17L, 1L, "c17"), | 330 | row(cRowType, 17L, 1L, "c17"), |
443 | @@ -342,7 +342,7 @@ | |||
444 | 342 | groupScan_Default(rabc), | 342 | groupScan_Default(rabc), |
445 | 343 | Collections.singleton(aRowType)), | 343 | Collections.singleton(aRowType)), |
446 | 344 | branchLookup_Nested(rabc, aRowType, rRowType, aRowType, InputPreservationOption.DISCARD_INPUT, 0), | 344 | branchLookup_Nested(rabc, aRowType, rRowType, aRowType, InputPreservationOption.DISCARD_INPUT, 0), |
448 | 345 | 0, 1); | 345 | 0, pipelineMap(), 1); |
449 | 346 | Cursor cursor = cursor(plan, queryContext, queryBindings); | 346 | Cursor cursor = cursor(plan, queryContext, queryBindings); |
450 | 347 | RowBase[] expected = new RowBase[]{ | 347 | RowBase[] expected = new RowBase[]{ |
451 | 348 | row(aRowType, 13L, 1L, "a13"), | 348 | row(aRowType, 13L, 1L, "a13"), |
452 | @@ -366,7 +366,7 @@ | |||
453 | 366 | groupScan_Default(rabc), | 366 | groupScan_Default(rabc), |
454 | 367 | Collections.singleton(aRowType)), | 367 | Collections.singleton(aRowType)), |
455 | 368 | branchLookup_Nested(rabc, aRowType, rRowType, aRowType, InputPreservationOption.DISCARD_INPUT, 0), | 368 | branchLookup_Nested(rabc, aRowType, rRowType, aRowType, InputPreservationOption.DISCARD_INPUT, 0), |
457 | 369 | 0, 1); | 369 | 0, pipelineMap(), 1); |
458 | 370 | CursorLifecycleTestCase testCase = new CursorLifecycleTestCase() | 370 | CursorLifecycleTestCase testCase = new CursorLifecycleTestCase() |
459 | 371 | { | 371 | { |
460 | 372 | @Override | 372 | @Override |
461 | 373 | 373 | ||
462 | === modified file 'src/test/java/com/akiban/server/test/it/qp/Map_NestedLoopsIT.java' | |||
463 | --- src/test/java/com/akiban/server/test/it/qp/Map_NestedLoopsIT.java 2013-07-10 21:30:34 +0000 | |||
464 | +++ src/test/java/com/akiban/server/test/it/qp/Map_NestedLoopsIT.java 2013-07-13 21:55:29 +0000 | |||
465 | @@ -102,25 +102,25 @@ | |||
466 | 102 | @Test(expected = IllegalArgumentException.class) | 102 | @Test(expected = IllegalArgumentException.class) |
467 | 103 | public void testLeftInputNull() | 103 | public void testLeftInputNull() |
468 | 104 | { | 104 | { |
470 | 105 | map_NestedLoops(null, groupScan_Default(coi), 0, 1); | 105 | map_NestedLoops(null, groupScan_Default(coi), 0, pipelineMap(), 1); |
471 | 106 | } | 106 | } |
472 | 107 | 107 | ||
473 | 108 | @Test(expected = IllegalArgumentException.class) | 108 | @Test(expected = IllegalArgumentException.class) |
474 | 109 | public void testRightInputNull() | 109 | public void testRightInputNull() |
475 | 110 | { | 110 | { |
477 | 111 | map_NestedLoops(groupScan_Default(coi), null, 0, 1); | 111 | map_NestedLoops(groupScan_Default(coi), null, 0, pipelineMap(), 1); |
478 | 112 | } | 112 | } |
479 | 113 | 113 | ||
480 | 114 | @Test(expected = IllegalArgumentException.class) | 114 | @Test(expected = IllegalArgumentException.class) |
481 | 115 | public void testNegativeInputBindingPosition() | 115 | public void testNegativeInputBindingPosition() |
482 | 116 | { | 116 | { |
484 | 117 | map_NestedLoops(groupScan_Default(coi), groupScan_Default(coi), -1, 1); | 117 | map_NestedLoops(groupScan_Default(coi), groupScan_Default(coi), -1, pipelineMap(), 1); |
485 | 118 | } | 118 | } |
486 | 119 | 119 | ||
487 | 120 | @Test(expected = IllegalArgumentException.class) | 120 | @Test(expected = IllegalArgumentException.class) |
488 | 121 | public void testNonPositiveDepth() | 121 | public void testNonPositiveDepth() |
489 | 122 | { | 122 | { |
491 | 123 | map_NestedLoops(groupScan_Default(coi), groupScan_Default(coi), 0, 0); | 123 | map_NestedLoops(groupScan_Default(coi), groupScan_Default(coi), 0, pipelineMap(),0); |
492 | 124 | } | 124 | } |
493 | 125 | 125 | ||
494 | 126 | // Test operator execution | 126 | // Test operator execution |
495 | @@ -132,7 +132,7 @@ | |||
496 | 132 | map_NestedLoops( | 132 | map_NestedLoops( |
497 | 133 | indexScan_Default(itemOidIndexRowType, false), | 133 | indexScan_Default(itemOidIndexRowType, false), |
498 | 134 | ancestorLookup_Nested(coi, itemOidIndexRowType, Collections.singleton(itemRowType), 0), | 134 | ancestorLookup_Nested(coi, itemOidIndexRowType, Collections.singleton(itemRowType), 0), |
500 | 135 | 0, 1); | 135 | 0, pipelineMap(), 1); |
501 | 136 | RowBase[] expected = new RowBase[]{ | 136 | RowBase[] expected = new RowBase[]{ |
502 | 137 | row(itemRowType, 1000L, 100L), | 137 | row(itemRowType, 1000L, 100L), |
503 | 138 | row(itemRowType, 1001L, 100L), | 138 | row(itemRowType, 1001L, 100L), |
504 | @@ -175,7 +175,7 @@ | |||
505 | 175 | groupScan_Default(coi), | 175 | groupScan_Default(coi), |
506 | 176 | Collections.singleton(customerRowType)), | 176 | Collections.singleton(customerRowType)), |
507 | 177 | project, | 177 | project, |
509 | 178 | 0, 1); | 178 | 0, pipelineMap(), 1); |
510 | 179 | RowType projectRowType = project.rowType(); | 179 | RowType projectRowType = project.rowType(); |
511 | 180 | RowBase[] expected = new RowBase[]{ | 180 | RowBase[] expected = new RowBase[]{ |
512 | 181 | row(projectRowType, 1L, 100L), | 181 | row(projectRowType, 1L, 100L), |
513 | @@ -212,7 +212,7 @@ | |||
514 | 212 | groupScan_Default(coi), | 212 | groupScan_Default(coi), |
515 | 213 | Collections.singleton(customerRowType)), | 213 | Collections.singleton(customerRowType)), |
516 | 214 | ifEmpty_Default(project, projectRowType, Arrays.asList(boundField(customerRowType, 0, 0), literal(null)), InputPreservationOption.KEEP_INPUT), | 214 | ifEmpty_Default(project, projectRowType, Arrays.asList(boundField(customerRowType, 0, 0), literal(null)), InputPreservationOption.KEEP_INPUT), |
518 | 215 | 0, 1); | 215 | 0, pipelineMap(), 1); |
519 | 216 | RowBase[] expected = new RowBase[]{ | 216 | RowBase[] expected = new RowBase[]{ |
520 | 217 | row(projectRowType, 1L, 100L), | 217 | row(projectRowType, 1L, 100L), |
521 | 218 | row(projectRowType, 1L, 101L), | 218 | row(projectRowType, 1L, 101L), |
522 | @@ -234,7 +234,7 @@ | |||
523 | 234 | map_NestedLoops( | 234 | map_NestedLoops( |
524 | 235 | indexScan_Default(itemOidIndexRowType, false), | 235 | indexScan_Default(itemOidIndexRowType, false), |
525 | 236 | ancestorLookup_Nested(coi, itemOidIndexRowType, Collections.singleton(itemRowType), 0), | 236 | ancestorLookup_Nested(coi, itemOidIndexRowType, Collections.singleton(itemRowType), 0), |
527 | 237 | 0, 1); | 237 | 0, pipelineMap(), 1); |
528 | 238 | CursorLifecycleTestCase testCase = new CursorLifecycleTestCase() | 238 | CursorLifecycleTestCase testCase = new CursorLifecycleTestCase() |
529 | 239 | { | 239 | { |
530 | 240 | @Override | 240 | @Override |
531 | @@ -291,8 +291,8 @@ | |||
532 | 291 | map_NestedLoops( | 291 | map_NestedLoops( |
533 | 292 | indexScan_Default(customerCidIndexRowType, false, cidRange), | 292 | indexScan_Default(customerCidIndexRowType, false, cidRange), |
534 | 293 | ancestorLookup_Nested(coi, customerCidIndexRowType, Collections.singleton(customerRowType), 0), | 293 | ancestorLookup_Nested(coi, customerCidIndexRowType, Collections.singleton(customerRowType), 0), |
537 | 294 | 0, 2), | 294 | 0, pipelineMap(), 2), |
538 | 295 | 1, 1); | 295 | 1, pipelineMap(), 1); |
539 | 296 | RowBase[] expected = new RowBase[]{ | 296 | RowBase[] expected = new RowBase[]{ |
540 | 297 | row(customerRowType, 1L, "northbridge"), | 297 | row(customerRowType, 1L, "northbridge"), |
541 | 298 | row(customerRowType, 2L, "foundation"), | 298 | row(customerRowType, 2L, "foundation"), |
542 | 299 | 299 | ||
543 | === added file 'src/test/java/com/akiban/server/test/it/qp/Map_NestedLoopsPipelineIT.java' | |||
544 | --- src/test/java/com/akiban/server/test/it/qp/Map_NestedLoopsPipelineIT.java 1970-01-01 00:00:00 +0000 | |||
545 | +++ src/test/java/com/akiban/server/test/it/qp/Map_NestedLoopsPipelineIT.java 2013-07-13 21:55:29 +0000 | |||
546 | @@ -0,0 +1,26 @@ | |||
547 | 1 | /** | ||
548 | 2 | * Copyright (C) 2009-2013 Akiban Technologies, Inc. | ||
549 | 3 | * | ||
550 | 4 | * This program is free software: you can redistribute it and/or modify | ||
551 | 5 | * it under the terms of the GNU Affero General Public License as published by | ||
552 | 6 | * the Free Software Foundation, either version 3 of the License, or | ||
553 | 7 | * (at your option) any later version. | ||
554 | 8 | * | ||
555 | 9 | * This program is distributed in the hope that it will be useful, | ||
556 | 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
557 | 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
558 | 12 | * GNU Affero General Public License for more details. | ||
559 | 13 | * | ||
560 | 14 | * You should have received a copy of the GNU Affero General Public License | ||
561 | 15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
562 | 16 | */ | ||
563 | 17 | |||
564 | 18 | package com.akiban.server.test.it.qp; | ||
565 | 19 | |||
566 | 20 | public class Map_NestedLoopsPipelineIT extends Map_NestedLoopsIT | ||
567 | 21 | { | ||
568 | 22 | @Override | ||
569 | 23 | protected boolean pipelineMap() { | ||
570 | 24 | return true; | ||
571 | 25 | } | ||
572 | 26 | } | ||
573 | 0 | 27 | ||
574 | === modified file 'src/test/java/com/akiban/server/test/it/qp/Sort_InsertionLimitedIT.java' | |||
575 | --- src/test/java/com/akiban/server/test/it/qp/Sort_InsertionLimitedIT.java 2013-07-10 18:42:14 +0000 | |||
576 | +++ src/test/java/com/akiban/server/test/it/qp/Sort_InsertionLimitedIT.java 2013-07-13 21:55:29 +0000 | |||
577 | @@ -540,7 +540,7 @@ | |||
578 | 540 | map_NestedLoops( | 540 | map_NestedLoops( |
579 | 541 | filter_Default(groupScan_Default(coi), | 541 | filter_Default(groupScan_Default(coi), |
580 | 542 | Collections.singleton(customerRowType)), | 542 | Collections.singleton(customerRowType)), |
582 | 543 | project, 0, 1), | 543 | project, 0, pipelineMap(), 1), |
583 | 544 | projectType, | 544 | projectType, |
584 | 545 | ordering(field(projectType, 0), true), | 545 | ordering(field(projectType, 0), true), |
585 | 546 | SortOption.PRESERVE_DUPLICATES, | 546 | SortOption.PRESERVE_DUPLICATES, |
586 | 547 | 547 | ||
587 | === modified file 'src/test/java/com/akiban/server/test/it/qp/UnionAll_DefaultIT.java' | |||
588 | --- src/test/java/com/akiban/server/test/it/qp/UnionAll_DefaultIT.java 2013-07-10 18:42:14 +0000 | |||
589 | +++ src/test/java/com/akiban/server/test/it/qp/UnionAll_DefaultIT.java 2013-07-13 21:55:29 +0000 | |||
590 | @@ -270,7 +270,7 @@ | |||
591 | 270 | xEQ9Range, | 270 | xEQ9Range, |
592 | 271 | ordering), | 271 | ordering), |
593 | 272 | txIndexRowType), | 272 | txIndexRowType), |
595 | 273 | 0, 1); | 273 | 0, pipelineMap(), 1); |
596 | 274 | String[] expected = new String[]{ | 274 | String[] expected = new String[]{ |
597 | 275 | hKey(1000), | 275 | hKey(1000), |
598 | 276 | hKey(1002), | 276 | hKey(1002), |
599 | 277 | 277 | ||
600 | === modified file 'src/test/java/com/akiban/sql/optimizer/OperatorCompilerTest.java' | |||
601 | --- src/test/java/com/akiban/sql/optimizer/OperatorCompilerTest.java 2013-03-22 20:05:57 +0000 | |||
602 | +++ src/test/java/com/akiban/sql/optimizer/OperatorCompilerTest.java 2013-07-13 21:55:29 +0000 | |||
603 | @@ -33,6 +33,7 @@ | |||
604 | 33 | import com.akiban.sql.optimizer.plan.ResultSet.ResultField; | 33 | import com.akiban.sql.optimizer.plan.ResultSet.ResultField; |
605 | 34 | import com.akiban.sql.optimizer.rule.ExplainPlanContext; | 34 | import com.akiban.sql.optimizer.rule.ExplainPlanContext; |
606 | 35 | import com.akiban.sql.optimizer.rule.RulesTestHelper; | 35 | import com.akiban.sql.optimizer.rule.RulesTestHelper; |
607 | 36 | import com.akiban.sql.optimizer.rule.PipelineConfiguration; | ||
608 | 36 | import com.akiban.sql.optimizer.rule.cost.TestCostEstimator; | 37 | import com.akiban.sql.optimizer.rule.cost.TestCostEstimator; |
609 | 37 | 38 | ||
610 | 38 | import com.akiban.junit.NamedParameterizedRunner; | 39 | import com.akiban.junit.NamedParameterizedRunner; |
611 | @@ -122,6 +123,7 @@ | |||
612 | 122 | compiler.initT3Registry(t3Registry); | 123 | compiler.initT3Registry(t3Registry); |
613 | 123 | } | 124 | } |
614 | 124 | compiler.initCostEstimator(new TestCostEstimator(ais, compiler.getSchema(), statsFile, false, properties), usePValues); | 125 | compiler.initCostEstimator(new TestCostEstimator(ais, compiler.getSchema(), statsFile, false, properties), usePValues); |
615 | 126 | compiler.initPipelineConfiguration(new PipelineConfiguration()); | ||
616 | 125 | compiler.initDone(); | 127 | compiler.initDone(); |
617 | 126 | return compiler; | 128 | return compiler; |
618 | 127 | } | 129 | } |
619 | 128 | 130 | ||
620 | === modified file 'src/test/java/com/akiban/sql/optimizer/rule/RulesTestContext.java' | |||
621 | --- src/test/java/com/akiban/sql/optimizer/rule/RulesTestContext.java 2013-03-22 20:05:57 +0000 | |||
622 | +++ src/test/java/com/akiban/sql/optimizer/rule/RulesTestContext.java 2013-07-13 21:55:29 +0000 | |||
623 | @@ -50,6 +50,7 @@ | |||
624 | 50 | context.initCostEstimator(new TestCostEstimator(ais, context.getSchema(), | 50 | context.initCostEstimator(new TestCostEstimator(ais, context.getSchema(), |
625 | 51 | statsFile, statsIgnoreMissingIndexes, | 51 | statsFile, statsIgnoreMissingIndexes, |
626 | 52 | properties), false); | 52 | properties), false); |
627 | 53 | context.initPipelineConfiguration(new PipelineConfiguration()); | ||
628 | 53 | context.initDone(); | 54 | context.initDone(); |
629 | 54 | return context; | 55 | return context; |
630 | 55 | } | 56 | } |
Looks good to me.