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 ka...@apache.org on 2009/12/28 11:21:10 UTC

svn commit: r894146 - /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NextSequenceNode.java

Author: kahatlen
Date: Mon Dec 28 10:21:09 2009
New Revision: 894146

URL: http://svn.apache.org/viewvc?rev=894146&view=rev
Log:
DERBY-712: Support for sequences

Added NextSequenceNode.java that was forgotten in the previous
commit. Contributed by Suran Jayathilaka <su...@gmail.com>.

Added:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NextSequenceNode.java   (with props)

Added: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NextSequenceNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NextSequenceNode.java?rev=894146&view=auto
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NextSequenceNode.java (added)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NextSequenceNode.java Mon Dec 28 10:21:09 2009
@@ -0,0 +1,139 @@
+/*
+
+   Derby - Class org.apache.derby.impl.sql.compile.NextSequenceNode
+
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to you 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.error.StandardException;
+import org.apache.derby.iapi.services.sanity.SanityManager;
+import org.apache.derby.iapi.services.compiler.MethodBuilder;
+import org.apache.derby.iapi.services.compiler.LocalField;
+import org.apache.derby.iapi.sql.dictionary.SequenceDescriptor;
+import org.apache.derby.iapi.sql.dictionary.SchemaDescriptor;
+
+import java.util.Vector;
+import java.sql.Types;
+
+/**
+ * A class that represents a value obtained from a Sequence using 'NEXT VALUE'
+ */
+public class NextSequenceNode extends ValueNode {
+
+    private TableName sequenceName;
+    private SequenceDescriptor sequenceDescriptor;
+
+    /**
+     * Initializer for a NextSequenceNode
+     *
+     * @param sequenceName The name of the sequence being called
+     * @throws org.apache.derby.iapi.error.StandardException
+     *          Thrown on error
+     */
+    public void init(Object sequenceName) throws StandardException {
+        this.sequenceName = (TableName) sequenceName;
+    }
+
+    /**
+     * Bind this expression.  This means binding the sub-expressions,
+     * as well as figuring out what the return type is for this expression.
+     *
+     * @param fromList        The FROM list for the query this
+     *                        expression is in, for binding columns.
+     * @param subqueryList    The subquery list being built as we find SubqueryNodes
+     * @param aggregateVector The aggregate vector being built as we find AggregateNodes
+     * @return The new top of the expression tree.
+     * @throws StandardException Thrown on error
+     */
+    public ValueNode bindExpression(
+            FromList fromList, SubqueryList subqueryList,
+            Vector aggregateVector, boolean forQueryRewrite)
+            throws StandardException {
+
+        // lookup sequence object in the data dictionary
+        SchemaDescriptor sd = getSchemaDescriptor(sequenceName.getSchemaName());
+        sequenceDescriptor = getDataDictionary().getSequenceDescriptor(sd, sequenceName.getTableName());
+
+        // set the datatype of the value node
+        this.setType(sequenceDescriptor.getDataType());
+
+        ValueNode returnNode = this;
+
+        return returnNode;
+
+    }
+
+
+    public void generateExpression
+            (
+                    ExpressionClassBuilder acb,
+                    MethodBuilder mb
+            ) throws StandardException {
+
+        //TODO : Proper implementation for value generation
+        generateConstant(acb, mb);    //dummy method to return a constant
+
+        acb.generateDataValue(mb, getTypeCompiler(),
+                getTypeServices().getCollationType(), (LocalField) null);
+
+    }
+
+    /**
+     * Dummy implementation to return a constant. Will be replaced with actual NEXT VALUE logic.
+     *
+     * @param ecb The ExpressionClassBuilder for the class being built
+     * @param mb The method the expression will go into
+     * @throws StandardException on error
+     */
+    public void generateConstant
+            (
+                    ExpressionClassBuilder ecb,
+                    MethodBuilder mb
+            ) throws StandardException {
+        switch (getTypeServices().getJDBCTypeId()) {
+            case Types.INTEGER:
+                mb.push(1);
+                break;
+            default:
+                if (SanityManager.DEBUG) {
+                    SanityManager.THROWASSERT(
+                            "Unexpected dataType = " + getTypeServices().getJDBCTypeId());
+                }
+        }
+
+    }
+
+    /**
+     * Convert this object to a String.  See comments in QueryTreeNode.java
+     * for how this should be done for tree printing.
+     *
+     * @return This object as a String
+     */
+
+    public String toString() {
+        if (SanityManager.DEBUG) {
+            return super.toString();
+        } else {
+            return "";
+        }
+    }
+
+    protected boolean isEquivalent(ValueNode other) throws StandardException {
+        return false;
+    }
+}

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NextSequenceNode.java
------------------------------------------------------------------------------
    svn:eol-style = native