001: /**
002: * com.mckoi.database.SystemQueryContext 25 Mar 2002
003: *
004: * Mckoi SQL Database ( http://www.mckoi.com/database )
005: * Copyright (C) 2000, 2001, 2002 Diehl and Associates, Inc.
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License
009: * Version 2 as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License Version 2 for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * Version 2 along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
019: *
020: * Change Log:
021: *
022: *
023: */package com.mckoi.database;
024:
025: /**
026: * A QueryContext that only wraps around a TransactionSystem and does not
027: * provide implementations for the 'getTable', and 'getDatabase' methods.
028: *
029: * @author Tobias Downer
030: */
031:
032: final class SystemQueryContext extends AbstractQueryContext {
033:
034: /**
035: * The wrapped TransactionSystem object.
036: */
037: private TransactionSystem system;
038:
039: /**
040: * The Transaction this is a part of.
041: */
042: private SimpleTransaction transaction;
043:
044: /**
045: * The context schema of this context.
046: */
047: private String current_schema;
048:
049: /**
050: * Constructs the QueryContext.
051: */
052: SystemQueryContext(SimpleTransaction transaction,
053: String current_schema) {
054: this .transaction = transaction;
055: this .system = transaction.getSystem();
056: this .current_schema = current_schema;
057: }
058:
059: /**
060: * Returns a TransactionSystem object that is used to determine information
061: * about the transactional system.
062: */
063: public TransactionSystem getSystem() {
064: return system;
065: }
066:
067: /**
068: * Returns the system FunctionLookup object.
069: */
070: public FunctionLookup getFunctionLookup() {
071: return getSystem().getFunctionLookup();
072: }
073:
074: /**
075: * Increments the sequence generator and returns the next unique key.
076: */
077: public long nextSequenceValue(String name) {
078: TableName tn = transaction.resolveToTableName(current_schema,
079: name, system.ignoreIdentifierCase());
080: return transaction.nextSequenceValue(tn);
081: }
082:
083: /**
084: * Returns the current sequence value returned for the given sequence
085: * generator within the connection defined by this context. If a value was
086: * not returned for this connection then a statement exception is generated.
087: */
088: public long currentSequenceValue(String name) {
089: TableName tn = transaction.resolveToTableName(current_schema,
090: name, system.ignoreIdentifierCase());
091: return transaction.lastSequenceValue(tn);
092: }
093:
094: /**
095: * Sets the current sequence value for the given sequence generator.
096: */
097: public void setSequenceValue(String name, long value) {
098: TableName tn = transaction.resolveToTableName(current_schema,
099: name, system.ignoreIdentifierCase());
100: transaction.setSequenceValue(tn, value);
101: }
102:
103: /**
104: * Returns a unique key for the given table source in the database.
105: */
106: public long nextUniqueID(String table_name) {
107: TableName tname = TableName.resolve(current_schema, table_name);
108: return transaction.nextUniqueID(tname);
109: }
110:
111: /**
112: * Returns the user name of the connection.
113: */
114: public String getUserName() {
115: return "@SYSTEM";
116: }
117:
118: }
|