You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by mi...@apache.org on 2006/08/17 22:36:15 UTC
svn commit: r432382 [3/3] - in
/db/derby/code/branches/10.1/java/engine/org/apache/derby/impl/sql/compile:
IntersectOrExceptNode.java SetOperatorNode.java SpecialFunctionNode.java
Modified: db/derby/code/branches/10.1/java/engine/org/apache/derby/impl/sql/compile/SpecialFunctionNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.1/java/engine/org/apache/derby/impl/sql/compile/SpecialFunctionNode.java?rev=432382&r1=432381&r2=432382&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/engine/org/apache/derby/impl/sql/compile/SpecialFunctionNode.java (original)
+++ db/derby/code/branches/10.1/java/engine/org/apache/derby/impl/sql/compile/SpecialFunctionNode.java Thu Aug 17 13:36:15 2006
@@ -1,224 +1,224 @@
-/*
-
- Derby - Class org.apache.derby.impl.sql.compile.SpecialFunctionNode
-
- Copyright 1999, 2005 The Apache Software Foundation or its licensors, as applicable.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- */
-
-package org.apache.derby.impl.sql.compile;
-
-import org.apache.derby.iapi.sql.compile.CompilerContext;
-
-import org.apache.derby.iapi.types.DataTypeDescriptor;
-
-import org.apache.derby.iapi.services.compiler.MethodBuilder;
-import org.apache.derby.iapi.services.compiler.LocalField;
-
-import org.apache.derby.iapi.services.sanity.SanityManager;
-
-import org.apache.derby.iapi.store.access.Qualifier;
-
-import org.apache.derby.impl.sql.compile.ExpressionClassBuilder;
-
-import java.lang.reflect.Modifier;
-
-import org.apache.derby.iapi.error.StandardException;
-import org.apache.derby.iapi.reference.ClassName;
-import org.apache.derby.iapi.services.classfile.VMOpcode;
-import org.apache.derby.iapi.sql.compile.C_NodeTypes;
-
-
-import java.sql.Types;
-
-import java.util.Vector;
-
-/**
- SpecialFunctionNode handles system SQL functions.
- A function value is either obtained by a method
- call off the LanguageConnectionContext or Activation.
- LanguageConnectionContext functions are state related to the connection.
- Activation functions are those related to the statement execution.
-
- Each SQL function takes no arguments and returns a SQLvalue.
- <P>
- Functions supported:
- <UL>
- <LI> USER
- <LI> CURRENT_USER
- <LI> SESSION_USER
- <LI> SYSTEM_USER
- <LI> CURRENT SCHEMA
- <LI> CURRENT ISOLATION
- <LI> IDENTITY_VAL_LOCAL
-
- </UL>
-
-
- <P>
-
- This node is used rather than some use of MethodCallNode for
- runtime performance. MethodCallNode does not provide a fast access
- to the current language connection or activatation, since it is geared
- towards user defined routines.
-
-
-*/
-public class SpecialFunctionNode extends ValueNode
-{
- /**
- Name of SQL function
- */
- String sqlName;
-
- /**
- Java method name
- */
- private String methodName;
-
- /**
- Return type of Java method.
- */
- private String methodType;
-
- /**
- */
- //private boolean isActivationCall;
-
- /**
- * Binding this special function means setting the result DataTypeServices.
- * In this case, the result type is based on the operation requested.
- *
- * @param fromList The FROM list for the statement. This parameter
- * is not used in this case.
- * @param subqueryList The subquery list being built as we find
- * SubqueryNodes. Not used in this case.
- * @param aggregateVector The aggregate vector being built as we find
- * AggregateNodes. Not used in this case.
- *
- * @return The new top of the expression tree.
- *
- * @exception StandardException Thrown on error
- */
- public ValueNode bindExpression(FromList fromList, SubqueryList subqueryList,
- Vector aggregateVector)
- throws StandardException
- { DataTypeDescriptor dtd;
- int nodeType = getNodeType();
- switch (nodeType)
- {
- case C_NodeTypes.USER_NODE:
- case C_NodeTypes.CURRENT_USER_NODE:
- case C_NodeTypes.SESSION_USER_NODE:
- case C_NodeTypes.SYSTEM_USER_NODE:
- switch (nodeType)
- {
- case C_NodeTypes.USER_NODE: sqlName = "USER"; break;
- case C_NodeTypes.CURRENT_USER_NODE: sqlName = "CURRENT_USER"; break;
- case C_NodeTypes.SESSION_USER_NODE: sqlName = "SESSION_USER"; break;
- case C_NodeTypes.SYSTEM_USER_NODE: sqlName = "SYSTEM_USER"; break;
- }
- methodName = "getAuthorizationId";
- methodType = "java.lang.String";
- dtd = DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.VARCHAR, false, 128);
- break;
-
- case C_NodeTypes.CURRENT_SCHEMA_NODE:
- sqlName = "CURRENT SCHEMA";
- methodName = "getCurrentSchemaName";
- methodType = "java.lang.String";
- dtd = DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.VARCHAR, false, 128);
- break;
-
- case C_NodeTypes.IDENTITY_VAL_NODE:
- sqlName = "IDENTITY_VAL_LOCAL";
- methodName = "getIdentityValue";
- methodType = "java.lang.Long";
- dtd = DataTypeDescriptor.getSQLDataTypeDescriptor("java.math.BigDecimal", 31, 0, true, 31);
- break;
-
- case C_NodeTypes.CURRENT_ISOLATION_NODE:
- sqlName = "CURRENT ISOLATION";
- methodName = "getCurrentIsolationLevelStr";
- methodType = "java.lang.String";
- dtd = DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.CHAR, 2);
- break;
- default:
- if (SanityManager.DEBUG)
- {
- SanityManager.THROWASSERT("Invalid type for SpecialFunctionNode " + nodeType);
- }
- dtd = null;
- break;
- }
-
- checkReliability(sqlName, CompilerContext.USER_ILLEGAL );
- setType(dtd);
-
- return this;
- }
-
- /**
- * Return the variant type for the underlying expression.
- All supported special functions are QUERY_INVARIANT
-
- *
- * @return The variant type for the underlying expression.
- */
- protected int getOrderableVariantType()
- {
- return Qualifier.QUERY_INVARIANT;
- }
-
- /**
- Generate an expression that returns a DataValueDescriptor and
- calls a method off the language connection or the activation.
- *
- * @param acb The ExpressionClassBuilder for the class being built
- * @param mb The method the code to place the code
- *
- *
- * @exception StandardException Thrown on error
- */
- public void generateExpression(ExpressionClassBuilder acb,
- MethodBuilder mb)
- throws StandardException
- {
- mb.pushThis();
- mb.callMethod(VMOpcode.INVOKEINTERFACE, ClassName.Activation, "getLanguageConnectionContext",
- ClassName.LanguageConnectionContext, 0);
-
- mb.callMethod(VMOpcode.INVOKEINTERFACE, (String) null, methodName, methodType, 0);
-
- String fieldType = getTypeCompiler().interfaceName();
- LocalField field = acb.newFieldDeclaration(Modifier.PRIVATE, fieldType);
-
- acb.generateDataValue(mb, getTypeCompiler(), field);
- }
-
- /*
- print the non-node subfields
- */
- public String toString() {
- if (SanityManager.DEBUG)
- {
- return super.toString()+ sqlName;
- }
- else
- {
- return "";
- }
- }
-}
+/*
+
+ Derby - Class org.apache.derby.impl.sql.compile.SpecialFunctionNode
+
+ Copyright 1999, 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ */
+
+package org.apache.derby.impl.sql.compile;
+
+import org.apache.derby.iapi.sql.compile.CompilerContext;
+
+import org.apache.derby.iapi.types.DataTypeDescriptor;
+
+import org.apache.derby.iapi.services.compiler.MethodBuilder;
+import org.apache.derby.iapi.services.compiler.LocalField;
+
+import org.apache.derby.iapi.services.sanity.SanityManager;
+
+import org.apache.derby.iapi.store.access.Qualifier;
+
+import org.apache.derby.impl.sql.compile.ExpressionClassBuilder;
+
+import java.lang.reflect.Modifier;
+
+import org.apache.derby.iapi.error.StandardException;
+import org.apache.derby.iapi.reference.ClassName;
+import org.apache.derby.iapi.services.classfile.VMOpcode;
+import org.apache.derby.iapi.sql.compile.C_NodeTypes;
+
+
+import java.sql.Types;
+
+import java.util.Vector;
+
+/**
+ SpecialFunctionNode handles system SQL functions.
+ A function value is either obtained by a method
+ call off the LanguageConnectionContext or Activation.
+ LanguageConnectionContext functions are state related to the connection.
+ Activation functions are those related to the statement execution.
+
+ Each SQL function takes no arguments and returns a SQLvalue.
+ <P>
+ Functions supported:
+ <UL>
+ <LI> USER
+ <LI> CURRENT_USER
+ <LI> SESSION_USER
+ <LI> SYSTEM_USER
+ <LI> CURRENT SCHEMA
+ <LI> CURRENT ISOLATION
+ <LI> IDENTITY_VAL_LOCAL
+
+ </UL>
+
+
+ <P>
+
+ This node is used rather than some use of MethodCallNode for
+ runtime performance. MethodCallNode does not provide a fast access
+ to the current language connection or activatation, since it is geared
+ towards user defined routines.
+
+
+*/
+public class SpecialFunctionNode extends ValueNode
+{
+ /**
+ Name of SQL function
+ */
+ String sqlName;
+
+ /**
+ Java method name
+ */
+ private String methodName;
+
+ /**
+ Return type of Java method.
+ */
+ private String methodType;
+
+ /**
+ */
+ //private boolean isActivationCall;
+
+ /**
+ * Binding this special function means setting the result DataTypeServices.
+ * In this case, the result type is based on the operation requested.
+ *
+ * @param fromList The FROM list for the statement. This parameter
+ * is not used in this case.
+ * @param subqueryList The subquery list being built as we find
+ * SubqueryNodes. Not used in this case.
+ * @param aggregateVector The aggregate vector being built as we find
+ * AggregateNodes. Not used in this case.
+ *
+ * @return The new top of the expression tree.
+ *
+ * @exception StandardException Thrown on error
+ */
+ public ValueNode bindExpression(FromList fromList, SubqueryList subqueryList,
+ Vector aggregateVector)
+ throws StandardException
+ { DataTypeDescriptor dtd;
+ int nodeType = getNodeType();
+ switch (nodeType)
+ {
+ case C_NodeTypes.USER_NODE:
+ case C_NodeTypes.CURRENT_USER_NODE:
+ case C_NodeTypes.SESSION_USER_NODE:
+ case C_NodeTypes.SYSTEM_USER_NODE:
+ switch (nodeType)
+ {
+ case C_NodeTypes.USER_NODE: sqlName = "USER"; break;
+ case C_NodeTypes.CURRENT_USER_NODE: sqlName = "CURRENT_USER"; break;
+ case C_NodeTypes.SESSION_USER_NODE: sqlName = "SESSION_USER"; break;
+ case C_NodeTypes.SYSTEM_USER_NODE: sqlName = "SYSTEM_USER"; break;
+ }
+ methodName = "getAuthorizationId";
+ methodType = "java.lang.String";
+ dtd = DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.VARCHAR, false, 128);
+ break;
+
+ case C_NodeTypes.CURRENT_SCHEMA_NODE:
+ sqlName = "CURRENT SCHEMA";
+ methodName = "getCurrentSchemaName";
+ methodType = "java.lang.String";
+ dtd = DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.VARCHAR, false, 128);
+ break;
+
+ case C_NodeTypes.IDENTITY_VAL_NODE:
+ sqlName = "IDENTITY_VAL_LOCAL";
+ methodName = "getIdentityValue";
+ methodType = "java.lang.Long";
+ dtd = DataTypeDescriptor.getSQLDataTypeDescriptor("java.math.BigDecimal", 31, 0, true, 31);
+ break;
+
+ case C_NodeTypes.CURRENT_ISOLATION_NODE:
+ sqlName = "CURRENT ISOLATION";
+ methodName = "getCurrentIsolationLevelStr";
+ methodType = "java.lang.String";
+ dtd = DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.CHAR, 2);
+ break;
+ default:
+ if (SanityManager.DEBUG)
+ {
+ SanityManager.THROWASSERT("Invalid type for SpecialFunctionNode " + nodeType);
+ }
+ dtd = null;
+ break;
+ }
+
+ checkReliability(sqlName, CompilerContext.USER_ILLEGAL );
+ setType(dtd);
+
+ return this;
+ }
+
+ /**
+ * Return the variant type for the underlying expression.
+ All supported special functions are QUERY_INVARIANT
+
+ *
+ * @return The variant type for the underlying expression.
+ */
+ protected int getOrderableVariantType()
+ {
+ return Qualifier.QUERY_INVARIANT;
+ }
+
+ /**
+ Generate an expression that returns a DataValueDescriptor and
+ calls a method off the language connection or the activation.
+ *
+ * @param acb The ExpressionClassBuilder for the class being built
+ * @param mb The method the code to place the code
+ *
+ *
+ * @exception StandardException Thrown on error
+ */
+ public void generateExpression(ExpressionClassBuilder acb,
+ MethodBuilder mb)
+ throws StandardException
+ {
+ mb.pushThis();
+ mb.callMethod(VMOpcode.INVOKEINTERFACE, ClassName.Activation, "getLanguageConnectionContext",
+ ClassName.LanguageConnectionContext, 0);
+
+ mb.callMethod(VMOpcode.INVOKEINTERFACE, (String) null, methodName, methodType, 0);
+
+ String fieldType = getTypeCompiler().interfaceName();
+ LocalField field = acb.newFieldDeclaration(Modifier.PRIVATE, fieldType);
+
+ acb.generateDataValue(mb, getTypeCompiler(), field);
+ }
+
+ /*
+ print the non-node subfields
+ */
+ public String toString() {
+ if (SanityManager.DEBUG)
+ {
+ return super.toString()+ sqlName;
+ }
+ else
+ {
+ return "";
+ }
+ }
+}
Propchange: db/derby/code/branches/10.1/java/engine/org/apache/derby/impl/sql/compile/SpecialFunctionNode.java
------------------------------------------------------------------------------
svn:eol-style = native