RDbRowSet Class Reference

#include <d32dbms.h>

Link against: edbms.lib

class RDbRowSet
Protected Attributes
RDbHandle< CDbCursor >iCursor
Public Member Enumerations
enumTAccess { EUpdatable, EReadOnly, EInsertOnly }
enumTAccuracy { EEnsure, EQuick }
enumTDirection { EForwards, EBackwards }
enumTPosition { EFirst, ENext, EPrevious, ELast, ..., EEnd }
Public Member Functions
IMPORT_C TBoolAtBeginning()
IMPORT_C TBoolAtEnd()
IMPORT_C TBoolAtRow()
voidBeginningL()
IMPORT_C TDbBookmarkBookmark()
IMPORT_C voidCancel()
IMPORT_C voidClose()
IMPORT_C TIntColCount()
IMPORT_C TDbColColDef(TDbColNo)
IMPORT_C TPtrCColDes(TDbColNo)
IMPORT_C TPtrC16ColDes16(TDbColNo)
IMPORT_C TPtrC8ColDes8(TDbColNo)
TInt ColInt(TDbColNo)
IMPORT_C TInt16ColInt16(TDbColNo)
IMPORT_C TInt32ColInt32(TDbColNo)
IMPORT_C TInt64ColInt64(TDbColNo)
IMPORT_C TInt8ColInt8(TDbColNo)
IMPORT_C TIntColLength(TDbColNo)
TReal ColReal(TDbColNo)
IMPORT_C TReal32ColReal32(TDbColNo)
IMPORT_C TReal64ColReal64(TDbColNo)
IMPORT_C CDbColSet *ColSetL()
IMPORT_C TIntColSize(TDbColNo)
IMPORT_C TTimeColTime(TDbColNo)
IMPORT_C TDbColTypeColType(TDbColNo)
TUint ColUint(TDbColNo)
IMPORT_C TUint16ColUint16(TDbColNo)
IMPORT_C TUint32ColUint32(TDbColNo)
IMPORT_C TUint8ColUint8(TDbColNo)
IMPORT_C TIntCountL(TAccuracy)
IMPORT_C voidDeleteL()
voidEndL()
IMPORT_C TIntFindL(TDirection, TDbQuery)
TBool FirstL()
IMPORT_C voidGetL()
IMPORT_C TBoolGotoL(TPosition)
IMPORT_C voidGotoL(const TDbBookmark &)
IMPORT_C voidInsertCopyL()
IMPORT_C voidInsertL()
TBool IsColNull(TDbColNo)
IMPORT_C TBoolIsEmptyL()
TBool LastL()
IMPORT_C TBoolMatchL(const RDbRowConstraint &)
TBool NextL()
TBool PreviousL()
IMPORT_C voidPutL()
IMPORT_C voidReset()
voidSetColL(TDbColNo, TInt)
IMPORT_C voidSetColL(TDbColNo, TInt32)
IMPORT_C voidSetColL(TDbColNo, TInt64)
voidSetColL(TDbColNo, TUint)
IMPORT_C voidSetColL(TDbColNo, TUint32)
IMPORT_C voidSetColL(TDbColNo, TReal32)
IMPORT_C voidSetColL(TDbColNo, TReal64)
IMPORT_C voidSetColL(TDbColNo, TTime)
IMPORT_C voidSetColL(TDbColNo, const TDesC8 &)
IMPORT_C voidSetColL(TDbColNo, const TDesC16 &)
IMPORT_C voidSetColNullL(TDbColNo)
IMPORT_C voidUpdateL()

Detailed Description

An abstract base class that provides functionality which is shared between SQL view objects and Table objects. This functionality includes most of the cursor navigation, row retrieval and update behaviour of rowsets.

Rowset objects do not provide the data for the rowset on which they operate. It is the responsibility of the derived classes RDbView and RDbTable to specify the data source.

This class is not intended for user derivation.

Member Attribute Documentation

iCursor

RDbHandle< CDbCursor >iCursor[protected]

Member Enumeration Documentation

Enum TAccess

Specifies which operations can be performed on a rowset.

EnumeratorValueDescription
EUpdatable

All operations can be performed on the rowset.

EReadOnly

Row navigation and reading are permitted.

EInsertOnly

Inserting new rows is the only valid operation on the rowset.

Enum TAccuracy

Specifies whether the CountL() function should ensure that it returns the exact value which may be a non-trivial task.

EnumeratorValueDescription
EEnsure

Take the time, if necessary, to return the exact value.

EQuick

Return any immediately available value.

Enum TDirection

Specifies the direction to search through the rowset when using the FindL() function.

EnumeratorValueDescription
EForwards

Search from the current row forwards through the set.

EBackwards

Search from the current row backwards through the set.

Enum TPosition

Specifies where the rowset should navigate to in the GotoL() function. Their use is encapsulated by the respective member functions FirstL(), NextL() etc.

EnumeratorValueDescription
EFirst

Move to the first row in the rowset.

ENext

Move to the next row in the rowset.

EPrevious

Move to the previous row in the rowset.

ELast

Move to the last row in the rowset.

EBeginning

Move to the position before the first row in the rowset.

EEnd

Move to the position after the last row in the rowset.

Member Function Documentation

AtBeginning ( )

IMPORT_C TBoolAtBeginning()const

Tests whether the cursor is at the beginning of the rowset.

Returns: ETrue if the cursor is at the beginning, otherwise EFalse.

AtEnd ( )

IMPORT_C TBoolAtEnd()const

Tests whether the cursor is at the end of the rowset.

Returns: ETrue if the cursor is at the end, otherwise EFalse.

AtRow ( )

IMPORT_C TBoolAtRow()const

Tests whether the cursor is on a row.

One of the following is true:

the rowset is currently updating a row

the rowset is currently inserting a row

GetL() can be called to retrieve the row

Returns: ETrue if the cursor is on a valid row; EFalse, otherwise.

BeginningL ( )

voidBeginningL()[inline]

Positions the cursor at the beginning of the rowset.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.

Bookmark ( )

IMPORT_C TDbBookmarkBookmark()const

Gets the bookmark for the current cursor position. Bookmarks cannot be extracted when the rowset is updating or inserting a row.

The Store Database implementation allows bookmarks to be extracted for any cursor position including the beginning and end.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.

Returns: A bookmark which can be used to return to the current position using the GotoL() function.

Cancel ( )

IMPORT_C voidCancel()

Cancels the update or insertion of a row, or recovers the rowset if PutL() fails. The cursor will return to the location prior to starting the update or insertion. It is also safe to call this function when the rowset object is not updating or inserting a row, in which case it does nothing.

In the Store database implementation, if this is called to abort a row update or insertion before PutL() is called or during row validation in PutL(), all the changes are discarded without requiring a transaction rollback and the rowset to be Reset().

Close ( )

IMPORT_C voidClose()

Closes the rowset and releases any owned resources. It is safe to close a rowset object which is not open.

ColCount ( )

IMPORT_C TIntColCount()const

Returns the number of columns which are defined in this rowset.

Returns: The number of columns which are defined in this rowset.

ColDef ( TDbColNo )

IMPORT_C TDbColColDef(TDbColNoaCol)const

Returns the definition of a column in the rowset.

ParameterDescription
aColThe column ordinal for which the column definition is required. Column ordinals range from 1 to ColCount().

Returns: The definition of the column aCol.

ColDes ( TDbColNo )

IMPORT_C TPtrCColDes(TDbColNoaCol)const

Extracts a Text column value. The column type must match the default descriptor type to use this extractor, ie. it must be equal to EDbColText.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: A descriptor of column aCol's value.

ColDes16 ( TDbColNo )

IMPORT_C TPtrC16ColDes16(TDbColNoaCol)const

Extracts a column as Unicode text.

ParameterDescription
aColThe column ordinal of the column to extract

Returns: A descriptor of column aCol's value.

ColDes8 ( TDbColNo )

IMPORT_C TPtrC8ColDes8(TDbColNoaCol)const

Extracts any column type, except Long columns, as binary data. Can handle any type of non-long column

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: A descriptor of column aCol's value.

ColInt ( TDbColNo )

TInt ColInt(TDbColNoaCol)const [inline]

Extracts a signed integer column value. The type should fit within a TInt.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColInt16 ( TDbColNo )

IMPORT_C TInt16ColInt16(TDbColNoaCol)const

Extracts a TInt16 or TInt8 column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColInt32 ( TDbColNo )

IMPORT_C TInt32ColInt32(TDbColNoaCol)const

Extracts a TInt32, TInt16 or TInt8 column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColInt64 ( TDbColNo )

IMPORT_C TInt64ColInt64(TDbColNoaCol)const

Extracts a TInt64 column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColInt8 ( TDbColNo )

IMPORT_C TInt8ColInt8(TDbColNoaCol)const

Extracts a TInt8 column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColLength ( TDbColNo )

IMPORT_C TIntColLength(TDbColNoaCol)const

Gets the length of a column value. As compared with ColSize(), this returns the number of "units" in the column:

NULL columns have a length of 0

non-NULL numerical and date-time columns have a length of 1

for Text columns the length is the character count

for Binary columns the length is the byte count

ParameterDescription
aColThe column ordinal of the column to check.

Returns: The length in "units" of column aCol's value.

ColReal ( TDbColNo )

TReal ColReal(TDbColNoaCol)const [inline]

Extracts a TReal64 column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColReal32 ( TDbColNo )

IMPORT_C TReal32ColReal32(TDbColNoaCol)const

Extracts a TReal32 column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColReal64 ( TDbColNo )

IMPORT_C TReal64ColReal64(TDbColNoaCol)const

Extracts a TReal64 column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColSetL ( )

IMPORT_C CDbColSet *ColSetL()const

Returns the entire column set for the rowset. This can be used to discover column ordinals for named columns in this rowset.

The function leaves with KErrNoMemory if there is not enough memory to carry out the operation.

Returns: The column set object which describes this rowset structure. The caller should delete it when it is no longer required.

ColSize ( TDbColNo )

IMPORT_C TIntColSize(TDbColNoaCol)const

Gets the size in bytes of a column value. This can be used for all column types, including Long columns. NULL columns return a size of 0.

Note:

This may yield unexpected results for small numerical column types as they are stored in memory as 32-bit values.

ParameterDescription
aColThe column ordinal of the column to check.

Returns: The length in bytes of column aCol's value.

ColTime ( TDbColNo )

IMPORT_C TTimeColTime(TDbColNoaCol)const

Extracts a TTime column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol. TTime may be either local time or universal time. DBMS doesn't interpret the value of TTime, it is left up to the user to know which has been used.

ColType ( TDbColNo )

IMPORT_C TDbColTypeColType(TDbColNoaCol)const

Returns the type of a column in the rowset.

ParameterDescription
aColThe column ordinal for which the column type is required. Column ordinals range from 1 to ColCount().

Returns: The type of the column aCol.

ColUint ( TDbColNo )

TUint ColUint(TDbColNoaCol)const [inline]

Extracts an unsigned integer column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColUint16 ( TDbColNo )

IMPORT_C TUint16ColUint16(TDbColNoaCol)const

Extracts a Uint16, Uint8 or Bit column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColUint32 ( TDbColNo )

IMPORT_C TUint32ColUint32(TDbColNoaCol)const

Extracts a Uint32, Uint16, Uint8 or Bit column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

ColUint8 ( TDbColNo )

IMPORT_C TUint8ColUint8(TDbColNoaCol)const

Extracts a Uint8 or Bit column value.

ParameterDescription
aColThe column ordinal of the column to extract.

Returns: The value of column aCol.

CountL ( TAccuracy )

IMPORT_C TIntCountL(TAccuracyanAccuracy = EEnsure)const

Returns the number of rows available in a rowset.

This can take some time to complete, and a parameter can be passed to request a quick but not always thorough count of the rows.

For SQL views, the value returned depends on the evaluation window being used by the view. If there is an evaluation window this function will always return the number of rows available in the window, not the total number which could be returned by the query.

capability
Note For a secure shared database, the caller must satisfy either the read or the write access policy for the table.
ParameterDescription
anAccuracyThis specifies whether to ensure that an accurate count is returned, or to give up if this value is not readily available. The default is to ensure an accurate count.

Returns: The number of rows available in the rowset, or KDbUndefinedCount if EQuick was specified and the count was not available.

DeleteL ( )

IMPORT_C voidDeleteL()

Deletes the current row in a rowset. The rowset must not currently be updating or inserting the row.

The rowset cursor is left positioned at the "hole" left by the deletion of the current row. Navigation to the next or previous row will have the same effect as if this row had not been deleted. Once the cursor has been moved from the "hole" it will disappear from the rowset.

If the client has not begun a transaction, this function will use an automatic transaction to update the rowset.

capability
Note For a secure shared database, the caller must satisfy the write access policy for the table.

EndL ( )

voidEndL()[inline]

Positions the cursor at the end of the rowset.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.

FindL ( TDirection, TDbQuery )

IMPORT_C TIntFindL(TDirectionaDirection,
TDbQueryaCriteria
)

Searches through a rowset for a row which fulfils an SQL search-condition. The search begins from the current position (which must be a valid row) and proceeds forwards or backwards through the available rows until it finds a match or runs out of rows.

The cursor is positioned to the matching row (or beginning/end of set) on return.

This is a brute-force approach to finding a row using an index for key-based retrieval on a Table rowset is a much faster but less flexible way of finding rows.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.
ParameterDescription
aDirectionSpecifies which direction to search after testing the current row.
aCriteriaA query object containing an SQL search-condition to match against.

Returns: If no match is found KErrNotFound is returned. Otherwise the number of rows navigated while finding a match, which may be 0 if the current row matches.

FirstL ( )

TBool FirstL()[inline]

Positions the cursor on the first row in the rowset. If there are no rows, the cursor is positioned at the end.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.

Returns: ETrue if the cursor is now at a row, EFalse if it is at the end.

GetL ( )

IMPORT_C voidGetL()

Gets the current row data for access using the column extractor functions. The cursor must be positioned at a valid row.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.

GotoL ( TPosition )

IMPORT_C TBoolGotoL(TPositionaPosition)

Moves the cursor to a specified position.

This is invoked by Beginning(), End(), FirstL(), LastL(), NextL() and PreviousL() to navigate the cursor. See those functions for descriptions of how the cursor behaves given different position specifications.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.
ParameterDescription
aPositionSpecifies the position to move the cursor to.

Returns: ETrue if the cursor is now at a row, EFalse if it is at the beginning or end.

GotoL ( const TDbBookmark & )

IMPORT_C voidGotoL(const TDbBookmark &aMark)

Goes to a previously bookmarked position in a rowset.

The Store Database implements bookmarks which are valid in any rowset based on the same table or generated by the same query, and which persist across transaction boundaries.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.
ParameterDescription
aMarkThe bookmark to return to. This should have been returned by a previous call to Bookmark() on this or an equivalent rowset object.

InsertCopyL ( )

IMPORT_C voidInsertCopyL()

Inserts a copy of the current row into the rowset. All auto-increment columns will be given a new value (as for InsertL()), the other columns will copy their values from the cursor's current row. If no client-begun transaction is in progress, this function begins an automatic transaction, which is committed by PutL().

After the column values have been modified using the SetColL() functions, the row can be written to the database using PutL().

capability
Note For a secure shared database, the caller must satisfy the write access policy for the table.

InsertL ( )

IMPORT_C voidInsertL()

Inserts a new row into the rowset. All auto-increment columns will be initialised with their new values, all other columns will be initialised to NULL values. If no client-begun transaction is in progress, this function begins an automatic transaction, which is committed by PutL().

After the column values have been set using the SetColL() functions, the row can be written to the database using PutL().

capability
Note For a secure shared database, the caller must satisfy the write access policy for the table.

IsColNull ( TDbColNo )

TBool IsColNull(TDbColNoaCol)const [inline]

Tests whether a column has the NULL value.

Columns which have the NULL value can still be extracted with the correct accessor function, in which case numerical columns will return a 0 (or equivalent) value, and text and binary columns will have a zero length.

ParameterDescription
aColThe column ordinal for the column to test.

Returns: ETrue if column aCol is NULL, otherwise EFalse.

IsEmptyL ( )

IMPORT_C TBoolIsEmptyL()const

Tests whether there are any rows in the rowset. This is often faster than testing whether CountL()==0.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.

Returns: ETrue if there are no rows available in the rowset, EFalse if there are one or more.

LastL ( )

TBool LastL()[inline]

Positions the cursor on the last row in the rowset. If there are no rows, the cursor is positioned at the beginning.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.

Returns: ETrue if the cursor is now at a row, EFalse if it is at the beginning.

MatchL ( const RDbRowConstraint & )

IMPORT_C TBoolMatchL(const RDbRowConstraint &aConstraint)

Tests whether the current row in the rowset matches a previously compiled row constraint. The rowset must not currently be updating or inserting a row.

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.
ParameterDescription
aConstraintA row constraint object which must have been previously opened on this rowset object.

Returns: ETrue if the current row fulfils the constraint, otherwise EFalse.

NextL ( )

TBool NextL()[inline]

Moves the cursor to the next row in the rowset. If there are no more rows, the cursor is positioned to the end.

If the cursor is at the beginning prior to the function, it is equivalent to FirstL().

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.

PreviousL ( )

TBool PreviousL()[inline]

Moves the cursor to the previous row in the rowset. If there are no more rows, the cursor is positioned to the beginning.

If the cursor is at the end prior to the function, it is equivalent to LastL().

capability
Note For a secure shared database, the caller must satisfy the read access policy for the table.

Returns: ETrue if the cursor is now at a row, EFalse if it is at the beginning.

PutL ( )

IMPORT_C voidPutL()

Completes the update or insertion of a row.

First the new row data is validated:

not-null columns are checked to be not NULL

numerical columns are checked to be in range for their type

variable length columns are checked to not exceed their maximum length

unique index keys are checked to ensure uniqueness is not violated

Note that modifying auto-increment columns is not prevented by DBMS.

Following validation the data is written to the database and any affected indexes are updated. On successful completion of the write, PutL() will then commit any automatic transaction.

The cursor is left positioned on the updated or inserted row where this lies in the rowset is not always well defined. To return to the row which was current prior to the update or insertion, a bookmark can be used.

In the Store Database implementation the written row is located in the rowset as follows:

Tables without an active index will leave updated rows in the same location and append new rows to the end of the rowset.

Tables with an active index place the row according to the active index ordering.

SQL views without an evaluation window will place it according to the rowset ordering. The row may subsequently disappear if it does not match the WHERE clause of the SQL query.

SQL views with a full evaluation window will leave updated rows in the same location and append new rows to the end of the rowset. Re-evaluation may cause the row to disappear if it does not match the WHERE clause of the SQL query.

SQL views with a partial evaluation window will leave updated rows in the same location, new rows are not added to the window and navigation from the new row is undefined. Further navigation and evaluation of the partial window will place the rows in the correct location according to the query.

capability
Note For a secure shared database, the caller must satisfy the write access policy for the table.

Reset ( )

IMPORT_C voidReset()

Resets the rowset.

For a Table, this just sets the rowset cursor to the beginning position.

For an SQL view, this discards any evaluated rows and returns the cursor to the beginning. The view then requires reevaluation.

The Store Database implementation requires this function to be called in order to recover an open rowset object after the database has been rolled back. The rowset does not need to be closed in this situation.

If a rowset object requires a reset, then all row functions return or leave with KErrNotReady.

SetColL ( TDbColNo, TInt )

voidSetColL(TDbColNoaCol,
TIntaValue
)[inline]

Sets a signed integer column value. The type should fit into a TInt.

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColL ( TDbColNo, TInt32 )

IMPORT_C voidSetColL(TDbColNoaCol,
TInt32aValue
)

Sets a TInt32, TInt16 or TInt8 column value.

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColL ( TDbColNo, TInt64 )

IMPORT_C voidSetColL(TDbColNoaCol,
TInt64aValue
)

Sets a TInt64 column value.

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColL ( TDbColNo, TUint )

voidSetColL(TDbColNoaCol,
TUintaValue
)[inline]

Sets a signed integer column value. The type should fit into a TInt.

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColL ( TDbColNo, TUint32 )

IMPORT_C voidSetColL(TDbColNoaCol,
TUint32aValue
)

Sets a TUint32, TUint16, TUint8 or Bit column value.

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColL ( TDbColNo, TReal32 )

IMPORT_C voidSetColL(TDbColNoaCol,
TReal32aValue
)

Sets a TReal32 column value.

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColL ( TDbColNo, TReal64 )

IMPORT_C voidSetColL(TDbColNoaCol,
TReal64aValue
)

Sets a TReal64 column value.

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColL ( TDbColNo, TTime )

IMPORT_C voidSetColL(TDbColNoaCol,
TTimeaValue
)

Sets a TTime column value.

TTime could be either local time or universal time. DBMS doesn't interpret the value of TTime, it is left up to the user to decide which should be used.

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColL ( TDbColNo, const TDesC8 & )

IMPORT_C voidSetColL(TDbColNoaCol,
const TDesC8 &aValue
)

Sets a column value from an 8 bit descriptor. This function can also set the value of Long columns.

Usually this is used to set a Text8 or LongText8 column from a non-Unicode text descriptor, but can be used for any column type: the data content is validated when the row is PutL().

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColL ( TDbColNo, const TDesC16 & )

IMPORT_C voidSetColL(TDbColNoaCol,
const TDesC16 &aValue
)

Set a column value from Unicode text.

ParameterDescription
aColThe column ordinal of the column to set.
aValueThe new column value.

SetColNullL ( TDbColNo )

IMPORT_C voidSetColNullL(TDbColNoaCol)

Use this function to set the value of a column to NULL.

capability
Note For a secure shared database, the caller must satisfy the write access policy for the table.
ParameterDescription
aColThe column ordinal of the column to set to NULL.

UpdateL ( )

IMPORT_C voidUpdateL()

Prepares the current row for update. If no client-begun transaction is in progress, this function begins an automatic transaction, which is committed by PutL().

After the column values have been modified using the SetColL() functions, the row can be written back to the database using PutL().

capability
Note For a secure shared database, the caller must satisfy the write access policy for the table.