Class Statement

java.lang.Object
com.mckoi.database.interpret.Statement
Direct Known Subclasses:
AlterTable, Call, Compact, CompleteTransaction, CreateTable, CreateTrigger, Delete, DropTable, DropTrigger, Function, Insert, Misc, NoOp, PrivManager, Schema, Select, Sequence, Set, Show, UpdateTable, UserManager, ViewManager

public abstract class Statement extends Object
Provides a set of useful utility functions to use by all the interpretted statements.
Author:
Tobias Downer
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected StatementTree
    The StatementTree object that is the container for the query.
    The Database context.
    protected SQLQuery
    The SQLQuery object that was used to produce this statement.
    protected Vector
    The list of all FromTableInterface objects of resources referenced in this query.
    protected User
    The user context.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    Add an FromTableInterface that is used within this query.
    Returns a DebugLogger object used to log debug commands.
    abstract Table
    Evaluates the statement and returns a table that represents the result set.
    final void
    Sets up internal variables for this statement for derived classes to use.
    abstract void
    Prepares the statement with the given Database object.
    final void
    Performs initial preparation on the contents of the StatementTree by resolving all sub queries and mapping functions to their executable forms.
    Given a Variable object, this will resolve the name into a column name the database understands (substitutes aliases, etc).

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • database

      protected DatabaseConnection database
      The Database context.
    • user

      protected User user
      The user context.
    • cmd

      protected StatementTree cmd
      The StatementTree object that is the container for the query.
    • query

      protected SQLQuery query
      The SQLQuery object that was used to produce this statement.
    • table_list

      protected Vector table_list
      The list of all FromTableInterface objects of resources referenced in this query. (FromTableInterface)
  • Constructor Details

    • Statement

      public Statement()
  • Method Details

    • Debug

      public final DebugLogger Debug()
      Returns a DebugLogger object used to log debug commands.
    • resolveTree

      public final void resolveTree() throws DatabaseException
      Performs initial preparation on the contents of the StatementTree by resolving all sub queries and mapping functions to their executable forms.

      Given a StatementTree and a Database context, this method will convert all sub-queries found in the StatementTree to a Queriable object. In other words, all StatementTree are converted to Select objects. The given 'database' object is used as the session to prepare the sub-queries against.

      This is called after 'init' and before 'prepare'.

      Throws:
      DatabaseException
    • resolveVariableName

      public Variable resolveVariableName(Variable v)
      Given a Variable object, this will resolve the name into a column name the database understands (substitutes aliases, etc).
    • addTable

      protected void addTable(FromTableInterface table)
      Add an FromTableInterface that is used within this query. These tables are used when we try to resolve a column name.
    • init

      public final void init(DatabaseConnection db, StatementTree stree, SQLQuery query)
      Sets up internal variables for this statement for derived classes to use. This is called before 'prepare' and 'isExclusive' is called.

      It is assumed that any ? style parameters in the StatementTree will have been resolved previous to a call to this method.

      Parameters:
      db - the DatabaseConnection that will execute this statement.
      stree - the StatementTree that contains the parsed content of the statement being executed.
    • prepare

      public abstract void prepare() throws DatabaseException
      Prepares the statement with the given Database object. This is called before the statement is evaluated. The prepare statement queries the database and resolves information about the statement (for example, it resolves column names and aliases and determines the tables that are touched by this statement so we can lock the appropriate tables before we evaluate).

      NOTE: Care must be taken to ensure that all methods called here are safe in as far as modifications to the data occuring. The rules for safety should be as follows. If the database is in EXCLUSIVE mode, then we need to wait until it's switched back to SHARED mode before this method is called. All collection of information done here should not involve any table state info. except for column count, column names, column types, etc. Queries such as obtaining the row count, selectable scheme information, and certainly 'getCellContents' must never be called during prepare. When prepare finishes, the affected tables are locked and the query is safe to 'evaluate' at which time table state is safe to inspect.

      Throws:
      DatabaseException
    • evaluate

      public abstract Table evaluate() throws DatabaseException, TransactionException
      Evaluates the statement and returns a table that represents the result set. This is called after 'prepare'.
      Throws:
      DatabaseException
      TransactionException