01: /*
02:
03: Derby - Class org.apache.derby.impl.sql.compile.MaterializeSubqueryNode
04:
05: Licensed to the Apache Software Foundation (ASF) under one or more
06: contributor license agreements. See the NOTICE file distributed with
07: this work for additional information regarding copyright ownership.
08: The ASF licenses this file to you under the Apache License, Version 2.0
09: (the "License"); you may not use this file except in compliance with
10: the License. You may obtain a copy of the License at
11:
12: http://www.apache.org/licenses/LICENSE-2.0
13:
14: Unless required by applicable law or agreed to in writing, software
15: distributed under the License is distributed on an "AS IS" BASIS,
16: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17: See the License for the specific language governing permissions and
18: limitations under the License.
19:
20: */
21:
22: package org.apache.derby.impl.sql.compile;
23:
24: import org.apache.derby.iapi.services.compiler.MethodBuilder;
25: import org.apache.derby.iapi.services.compiler.LocalField;
26: import org.apache.derby.iapi.error.StandardException;
27: import org.apache.derby.iapi.reference.ClassName;
28: import org.apache.derby.iapi.services.classfile.VMOpcode;
29:
30: import org.apache.derby.impl.sql.compile.ActivationClassBuilder;
31:
32: /**
33: * A MaterializeSubqueryNode is used to replace the nodes for a subquery, to facilitate
34: * code generation for materialization if possible. See beetle 4373 for details.
35: *
36: * @author Tingjian Ge
37: */
38: class MaterializeSubqueryNode extends ResultSetNode {
39:
40: private LocalField lf;
41:
42: public MaterializeSubqueryNode(LocalField lf) {
43: this .lf = lf;
44: }
45:
46: public void generate(ActivationClassBuilder acb, MethodBuilder mb)
47: throws StandardException {
48: acb.pushThisAsActivation(mb);
49: mb.getField(lf);
50: mb.callMethod(VMOpcode.INVOKEVIRTUAL, ClassName.BaseActivation,
51: "materializeResultSetIfPossible",
52: ClassName.NoPutResultSet, 1);
53: }
54:
55: void decrementLevel(int decrement) {
56: }
57: }
|