001: /*
002:
003: Derby - Class org.apache.derby.iapi.sql.dictionary.PermissionsCatalogRowFactory
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.impl.sql.catalog;
023:
024: import org.apache.derby.iapi.error.StandardException;
025: import org.apache.derby.iapi.reference.Limits;
026: import org.apache.derby.iapi.services.uuid.UUIDFactory;
027: import org.apache.derby.iapi.sql.dictionary.CatalogRowFactory;
028: import org.apache.derby.iapi.sql.dictionary.PermissionsDescriptor;
029: import org.apache.derby.iapi.sql.execute.ExecIndexRow;
030: import org.apache.derby.iapi.sql.execute.ExecRow;
031: import org.apache.derby.iapi.sql.execute.ExecutionFactory;
032: import org.apache.derby.iapi.types.DataValueDescriptor;
033: import org.apache.derby.iapi.types.DataValueFactory;
034: import org.apache.derby.iapi.types.RowLocation;
035: import org.apache.derby.iapi.types.StringDataValue;
036:
037: abstract class PermissionsCatalogRowFactory extends CatalogRowFactory {
038: static final String AUTHORIZATION_ID_TYPE = "VARCHAR";
039: static final boolean AUTHORIZATION_ID_IS_BUILTIN_TYPE = true;
040: static final int AUTHORIZATION_ID_LENGTH = Limits.MAX_IDENTIFIER_LENGTH;
041:
042: PermissionsCatalogRowFactory(UUIDFactory uuidf,
043: ExecutionFactory ef, DataValueFactory dvf,
044: boolean convertIdToLower) {
045: super (uuidf, ef, dvf, convertIdToLower);
046: }
047:
048: DataValueDescriptor getAuthorizationID(String value) {
049: return getDataValueFactory().getVarcharDataValue(value);
050: }
051:
052: DataValueDescriptor getNullAuthorizationID() {
053: return getDataValueFactory().getNullVarchar(
054: (StringDataValue) null);
055: }
056:
057: /**
058: * Extract an internal authorization ID from a row.
059: *
060: * @param row
061: * @param columnPos 1 based
062: *
063: * @return The internal authorization ID
064: */
065: String getAuthorizationID(ExecRow row, int columnPos)
066: throws StandardException {
067: return row.getColumn(columnPos).getString();
068: }
069:
070: /**
071: * Build an index key row from a permission descriptor. A key row does not include the RowLocation column.
072: *
073: * @param indexNumber
074: * @param perm a permission descriptor of the appropriate class for this PermissionsCatalogRowFactory class.
075: *
076: * @exception StandardException standard error policy
077: */
078: abstract ExecIndexRow buildIndexKeyRow(int indexNumber,
079: PermissionsDescriptor perm) throws StandardException;
080:
081: /**
082: * Or a set of permissions in with a row from this catalog table
083: *
084: * @param row an existing row
085: * @param perm a permission descriptor of the appropriate class for this PermissionsCatalogRowFactory class.
086: * @param colsChanged An array with one element for each column in row. It is updated to
087: * indicate which columns in row were changed
088: *
089: * @return The number of columns that were changed.
090: *
091: * @exception StandardException standard error policy
092: */
093: abstract int orPermissions(ExecRow row, PermissionsDescriptor perm,
094: boolean[] colsChanged) throws StandardException;
095:
096: /**
097: * Remove a set of permissions from a row from this catalog table
098: *
099: * @param row an existing row
100: * @param perm a permission descriptor of the appropriate class for this PermissionsCatalogRowFactory class.
101: * @param colsChanged An array with one element for each column in row. It is updated to
102: * indicate which columns in row were changed
103: *
104: * @return -1 if there are no permissions left in the row, otherwise the number of columns that were changed.
105: *
106: * @exception StandardException standard error policy
107: */
108: abstract int removePermissions(ExecRow row,
109: PermissionsDescriptor perm, boolean[] colsChanged)
110: throws StandardException;
111:
112: /**
113: * Set the uuid of the passed permission descriptor to the uuid of the row
114: * from the system table. DataDictionary will make this call before calling
115: * the dependency manager to send invalidation messages to the objects
116: * dependent on the permission descriptor's uuid.
117: *
118: * @param row The row from the system table for the passed permission descriptor
119: * @param perm Permission descriptor
120: * @throws StandardException
121: */
122: abstract void setUUIDOfThePassedDescriptor(ExecRow row,
123: PermissionsDescriptor perm) throws StandardException;
124: }
|