public void OnTableCompositeCreate(IQuery systemQuery) { // SYSTEM.SEQUENCE_INFO var tableInfo = new TableInfo(SequenceManager.SequenceInfoTableName); tableInfo.AddColumn("id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("schema", PrimitiveTypes.String()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("type", PrimitiveTypes.Numeric()); tableInfo = tableInfo.AsReadOnly(); systemQuery.Access().CreateTable(tableInfo); // SYSTEM.SEQUENCE tableInfo = new TableInfo(SequenceManager.SequenceTableName); tableInfo.AddColumn("seq_id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("last_value", PrimitiveTypes.Numeric()); tableInfo.AddColumn("increment", PrimitiveTypes.Numeric()); tableInfo.AddColumn("minvalue", PrimitiveTypes.Numeric()); tableInfo.AddColumn("maxvalue", PrimitiveTypes.Numeric()); tableInfo.AddColumn("start", PrimitiveTypes.Numeric()); tableInfo.AddColumn("cache", PrimitiveTypes.Numeric()); tableInfo.AddColumn("cycle", PrimitiveTypes.Boolean()); tableInfo = tableInfo.AsReadOnly(); systemQuery.Access().CreateTable(tableInfo); }
static SessionTableContainer() { // SYSTEM.OPEN_SESSIONS OpenSessionsTableInfo = new TableInfo(SystemSchema.OpenSessionsTableName); OpenSessionsTableInfo.AddColumn("username", PrimitiveTypes.String()); OpenSessionsTableInfo.AddColumn("host_string", PrimitiveTypes.String()); OpenSessionsTableInfo.AddColumn("last_command", PrimitiveTypes.DateTime()); OpenSessionsTableInfo.AddColumn("time_connected", PrimitiveTypes.DateTime()); OpenSessionsTableInfo = OpenSessionsTableInfo.AsReadOnly(); // SYSTEM.SESSION_INFO SessionInfoTableInfo = new TableInfo(SystemSchema.SessionInfoTableName); SessionInfoTableInfo.AddColumn("var", PrimitiveTypes.String()); SessionInfoTableInfo.AddColumn("value", PrimitiveTypes.String()); SessionInfoTableInfo = SessionInfoTableInfo.AsReadOnly(); // SYSTEM.STATS StatisticsTableInfo = new TableInfo(SystemSchema.StatisticsTableName); StatisticsTableInfo.AddColumn("stat_name", PrimitiveTypes.String()); StatisticsTableInfo.AddColumn("value", PrimitiveTypes.String()); StatisticsTableInfo = StatisticsTableInfo.AsReadOnly(); IntTableInfo = new TableInfo[3]; IntTableInfo[0] = StatisticsTableInfo; IntTableInfo[1] = SessionInfoTableInfo; IntTableInfo[2] = OpenSessionsTableInfo; }
public SubsetTable(ITable table, int[] columns, ObjectName[] aliases) : base(table) { if (columns.Length != aliases.Length) { throw new ArgumentException("The number of column offsets and the number of aliases do not match"); } this.columns = columns; this.aliases = aliases; var parentInfo = Parent.TableInfo; tableInfo = new TableInfo(parentInfo.TableName); for (int i = 0; i < columns.Length; ++i) { int mapTo = columns[i]; var origColumnInfo = Parent.TableInfo.Columns[mapTo]; var columnInfo = new ColumnInfo(aliases[i].Name, origColumnInfo.ColumnType) { DefaultValue = origColumnInfo.DefaultValue }; tableInfo.Columns.Add(columnInfo); } tableInfo = tableInfo.AsReadOnly(); }
public void Create() { // SYSTEM.SEQUENCE_INFO var tableInfo = new TableInfo(SystemSchema.SequenceInfoTableName); tableInfo.AddColumn("id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("schema", PrimitiveTypes.String()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("type", PrimitiveTypes.Numeric()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); // SYSTEM.SEQUENCE tableInfo = new TableInfo(SystemSchema.SequenceTableName); tableInfo.AddColumn("seq_id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("last_value", PrimitiveTypes.Numeric()); tableInfo.AddColumn("increment", PrimitiveTypes.Numeric()); tableInfo.AddColumn("minvalue", PrimitiveTypes.Numeric()); tableInfo.AddColumn("maxvalue", PrimitiveTypes.Numeric()); tableInfo.AddColumn("start", PrimitiveTypes.Numeric()); tableInfo.AddColumn("cache", PrimitiveTypes.Numeric()); tableInfo.AddColumn("cycle", PrimitiveTypes.Boolean()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); }
private static TableInfo CreateTableInfo(string schema, string name) { var tableInfo = new TableInfo(new ObjectName(new ObjectName(schema), name)); tableInfo.AddColumn("type", PrimitiveTypes.Numeric()); tableInfo.AddColumn("on_object", PrimitiveTypes.String()); tableInfo.AddColumn("routine_name", PrimitiveTypes.String()); tableInfo.AddColumn("param_args", PrimitiveTypes.String()); tableInfo.AddColumn("owner", PrimitiveTypes.String()); return(tableInfo.AsReadOnly()); }
public void Create() { // SYSTEM.SCHEMA_INFO var tableInfo = new TableInfo(SystemSchema.SchemaInfoTableName); tableInfo.AddColumn("id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("type", PrimitiveTypes.String()); tableInfo.AddColumn("culture", PrimitiveTypes.String()); tableInfo.AddColumn("other", PrimitiveTypes.String()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); }
public void OnTableCompositeSetup(IQuery systemQuery) { var tableInfo = new TableInfo(SystemSchema.GrantsTableName); tableInfo.AddColumn("priv_bit", PrimitiveTypes.Numeric()); tableInfo.AddColumn("object", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("grantee", PrimitiveTypes.String()); tableInfo.AddColumn("grant_option", PrimitiveTypes.Boolean()); tableInfo.AddColumn("granter", PrimitiveTypes.String()); tableInfo = tableInfo.AsReadOnly(); systemQuery.Access().CreateSystemTable(tableInfo); }
private static void OnTableCompositeSetup(IQuery systemQuery) { var tableInfo = new TableInfo(SystemSchema.GrantsTableName); tableInfo.AddColumn("priv_bit", PrimitiveTypes.Numeric()); tableInfo.AddColumn("object", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("grantee", PrimitiveTypes.String()); tableInfo.AddColumn("grant_option", PrimitiveTypes.Boolean()); tableInfo.AddColumn("granter", PrimitiveTypes.String()); tableInfo = tableInfo.AsReadOnly(); systemQuery.Access().CreateTable(tableInfo); }
private static TableInfo CreateTableInfo(string schema, string name) { // Create the TableInfo that describes this entry var info = new TableInfo(new ObjectName(new ObjectName(schema), name)); // Add column definitions info.AddColumn("type", PrimitiveTypes.String()); info.AddColumn("location", PrimitiveTypes.String()); info.AddColumn("return_type", PrimitiveTypes.String()); info.AddColumn("param_args", PrimitiveTypes.String()); info.AddColumn("owner", PrimitiveTypes.String()); return(info.AsReadOnly()); }
private static TableInfo CreateTableInfo(ObjectName schema, string name) { var info = new TableInfo(new ObjectName(schema, name)); info.AddColumn("last_value", PrimitiveTypes.Numeric()); info.AddColumn("current_value", PrimitiveTypes.Numeric()); info.AddColumn("top_value", PrimitiveTypes.Numeric()); info.AddColumn("increment_by", PrimitiveTypes.Numeric()); info.AddColumn("min_value", PrimitiveTypes.Numeric()); info.AddColumn("max_value", PrimitiveTypes.Numeric()); info.AddColumn("start", PrimitiveTypes.Numeric()); info.AddColumn("cache", PrimitiveTypes.Numeric()); info.AddColumn("cycle", PrimitiveTypes.Boolean()); info = info.AsReadOnly(); return(info); }
private static void CreateTables(IQuery context) { var tableInfo = new TableInfo(UserManager.UserTableName); tableInfo.AddColumn("name", PrimitiveTypes.String()); // TODO: User table must be completed ... tableInfo = tableInfo.AsReadOnly(); context.Access().CreateTable(tableInfo); context.Access().AddPrimaryKey(UserManager.UserTableName, new[] { "name" }, "SYSTEM_USER_PK"); tableInfo = new TableInfo(UserManager.PasswordTableName); tableInfo.AddColumn("user", PrimitiveTypes.String()); tableInfo.AddColumn("method", PrimitiveTypes.String()); tableInfo.AddColumn("method_args", PrimitiveTypes.Binary()); tableInfo.AddColumn("identifier", PrimitiveTypes.String()); tableInfo = tableInfo.AsReadOnly(); context.Access().CreateTable(tableInfo); tableInfo = new TableInfo(UserManager.UserRoleTableName); tableInfo.AddColumn("user", PrimitiveTypes.String()); tableInfo.AddColumn("role", PrimitiveTypes.String()); tableInfo.AddColumn("admin", PrimitiveTypes.Boolean()); tableInfo = tableInfo.AsReadOnly(); context.Access().CreateTable(tableInfo); tableInfo = new TableInfo(UserManager.RoleTableName); tableInfo.AddColumn("name", PrimitiveTypes.String(), true); tableInfo = tableInfo.AsReadOnly(); context.Access().CreateTable(tableInfo); context.Access().AddPrimaryKey(UserManager.RoleTableName, new[] { "name" }, "SYSTEM_ROLE_PK"); var fkCol = new[] { "user" }; var rfkCol = new[] { "role" }; var refCol = new[] { "name" }; const ForeignKeyAction onUpdate = ForeignKeyAction.NoAction; const ForeignKeyAction onDelete = ForeignKeyAction.Cascade; context.Access().AddForeignKey(UserManager.PasswordTableName, fkCol, UserManager.UserTableName, refCol, onDelete, onUpdate, "USER_PASSWORD_FK"); context.Access().AddForeignKey(UserManager.UserRoleTableName, fkCol, UserManager.UserTableName, refCol, onDelete, onUpdate, "USER_PRIV_FK"); context.Access().AddForeignKey(UserManager.UserRoleTableName, rfkCol, UserManager.RoleTableName, refCol, onDelete, onUpdate, "USER_ROLE_FK"); }
public void CreateTable(TableInfo tableInfo, bool temporary) { var tableName = tableInfo.TableName; if (visibleTables.ContainsKey(tableName)) throw new InvalidOperationException(String.Format("Table '{0}' already exists.", tableName)); tableInfo = tableInfo.AsReadOnly(); var source = Composite.CreateTableSource(tableInfo, temporary); // Add this table (and an index set) for this table. AddVisibleTable(source, source.CreateIndexSet()); int tableId = source.TableId; Transaction.OnTableCreated(tableId, tableName); Transaction.CreateNativeSequence(tableName); }
static SystemSchema() { // SYSTEM.TABLE_INFO TableInfoTableInfo = new TableInfo(TableInfoTableName); TableInfoTableInfo.AddColumn("catalog", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("schema", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("name", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("type", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("other", PrimitiveTypes.String()); TableInfoTableInfo = TableInfoTableInfo.AsReadOnly(); // SYSTEM.TABLE_COLUMNS TableColumnsTableInfo = new TableInfo(TableColumnsTableName); TableColumnsTableInfo.AddColumn("schema", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("table", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("column", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("sql_type", PrimitiveTypes.Numeric()); TableColumnsTableInfo.AddColumn("type_desc", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("size", PrimitiveTypes.Numeric()); TableColumnsTableInfo.AddColumn("scale", PrimitiveTypes.Numeric()); TableColumnsTableInfo.AddColumn("not_null", PrimitiveTypes.Boolean()); TableColumnsTableInfo.AddColumn("default", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("index_str", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("seq_no", PrimitiveTypes.Numeric()); TableColumnsTableInfo = TableColumnsTableInfo.AsReadOnly(); // SYSTEM.VARIABLES VariablesTableInfo = new TableInfo(VariablesTableName); VariablesTableInfo.AddColumn("var", PrimitiveTypes.String()); VariablesTableInfo.AddColumn("type", PrimitiveTypes.String()); VariablesTableInfo.AddColumn("value", PrimitiveTypes.String()); VariablesTableInfo.AddColumn("constant", PrimitiveTypes.Boolean()); VariablesTableInfo.AddColumn("not_null", PrimitiveTypes.Boolean()); VariablesTableInfo.AddColumn("is_set", PrimitiveTypes.Boolean()); VariablesTableInfo = VariablesTableInfo.AsReadOnly(); // SYSTEM.PRODUCT_INFO ProductInfoTableInfo = new TableInfo(ProductInfoTableName); ProductInfoTableInfo.AddColumn("var", PrimitiveTypes.String()); ProductInfoTableInfo.AddColumn("value", PrimitiveTypes.String()); ProductInfoTableInfo = ProductInfoTableInfo.AsReadOnly(); // SYSTEM.STATS StatisticsTableInfo = new TableInfo(StatisticsTableName); StatisticsTableInfo.AddColumn("stat_name", PrimitiveTypes.String()); StatisticsTableInfo.AddColumn("value", PrimitiveTypes.String()); StatisticsTableInfo = StatisticsTableInfo.AsReadOnly(); // SYSTEM.SQL_TYPES SqlTypesTableInfo = new TableInfo(SqlTypesTableName); SqlTypesTableInfo.AddColumn("TYPE_NAME", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("DATA_TYPE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("PRECISION", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("LITERAL_PREFIX", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("LITERAL_SUFFIX", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("CREATE_PARAMS", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("NULLABLE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("CASE_SENSITIVE", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("SEARCHABLE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("UNSIGNED_ATTRIBUTE", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("FIXED_PREC_SCALE", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("AUTO_INCREMENT", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("LOCAL_TYPE_NAME", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("MINIMUM_SCALE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("MAXIMUM_SCALE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("SQL_DATA_TYPE", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("SQL_DATETIME_SUB", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("NUM_PREC_RADIX", PrimitiveTypes.Numeric()); SqlTypesTableInfo = SqlTypesTableInfo.AsReadOnly(); // SYSTEM.OPEN_SESSIONS OpenSessionsTableInfo = new TableInfo(OpenSessionsTableName); OpenSessionsTableInfo.AddColumn("username", PrimitiveTypes.String()); OpenSessionsTableInfo.AddColumn("host_string", PrimitiveTypes.String()); OpenSessionsTableInfo.AddColumn("last_command", PrimitiveTypes.DateTime()); OpenSessionsTableInfo.AddColumn("time_connected", PrimitiveTypes.DateTime()); OpenSessionsTableInfo = OpenSessionsTableInfo.AsReadOnly(); // CONNECTION_INFO SessionInfoTableInfo = new TableInfo(SessionInfoTableName); SessionInfoTableInfo.AddColumn("var", PrimitiveTypes.String()); SessionInfoTableInfo.AddColumn("value", PrimitiveTypes.String()); SessionInfoTableInfo = SessionInfoTableInfo.AsReadOnly(); // SYSTEM.PRIVS PrivilegesTableInfo = new TableInfo(PrivilegesTableName); PrivilegesTableInfo.AddColumn("priv_bit", PrimitiveTypes.Numeric()); PrivilegesTableInfo.AddColumn("description", PrimitiveTypes.String()); PrivilegesTableInfo = PrivilegesTableInfo.AsReadOnly(); }
public FunctionTable(ITable table, SqlExpression[] functionList, string[] columnNames, IRequest queryContext) : base(queryContext.Context) { // Make sure we are synchronized over the class. lock (typeof(FunctionTable)) { uniqueId = uniqueKeySeq; ++uniqueKeySeq; } uniqueId = (uniqueId & 0x0FFFFFFF) | 0x010000000; context = queryContext; ReferenceTable = table; varResolver = table.GetVariableResolver(); varResolver = varResolver.ForRow(0); // Create a DataTableInfo object for this function table. funTableInfo = new TableInfo(FunctionTableName); expList = new SqlExpression[functionList.Length]; expInfo = new byte[functionList.Length]; // Create a new DataColumnInfo for each expression, and work out if the // expression is simple or not. for (int i = 0; i < functionList.Length; ++i) { var expr = functionList[i]; // Examine the expression and determine if it is simple or not if (expr.IsConstant() && !expr.HasAggregate(context)) { // If expression is a constant, solve it var result = expr.Evaluate(context, null); if (result.ExpressionType != SqlExpressionType.Constant) throw new InvalidOperationException(); expr = result; expList[i] = expr; expInfo[i] = 1; } else { // Otherwise must be dynamic expList[i] = expr; expInfo[i] = 0; } // Make the column info funTableInfo.AddColumn(columnNames[i], expr.ReturnType(context, varResolver)); } // Make sure the table info isn't changed from this point on. funTableInfo = funTableInfo.AsReadOnly(); // routine tables are the size of the referring table. rowCount = table.RowCount; // Set schemes to 'blind search'. SetupIndexes(DefaultIndexTypes.BlindSearch); }
public void CreateTable(TableInfo tableInfo, bool temporary) { var tableName = tableInfo.TableName; var source = FindVisibleTable(tableName, false); if (source != null) throw new InvalidOperationException(String.Format("Table '{0}' already exists.", tableName)); tableInfo = tableInfo.AsReadOnly(); source = Composite.CreateTableSource(tableInfo, temporary); // Add this table (and an index set) for this table. AddVisibleTable(source, source.CreateIndexSet()); int tableId = source.TableId; Transaction.Registry.RegisterEvent(new TableCreatedEvent(tableId, tableName)); Transaction.CreateNativeSequence(tableName); }
private static TableInfo CreateTableInfo(string schema, string name) { var tableInfo = new TableInfo(new ObjectName(new ObjectName(schema), name)); tableInfo.AddColumn("type", PrimitiveTypes.Numeric()); tableInfo.AddColumn("on_object", PrimitiveTypes.String()); tableInfo.AddColumn("routine_name", PrimitiveTypes.String()); tableInfo.AddColumn("param_args", PrimitiveTypes.String()); tableInfo.AddColumn("owner", PrimitiveTypes.String()); return tableInfo.AsReadOnly(); }
public TemporaryTable(IContext context, TableInfo tableInfo) : base(context) { this.tableInfo = tableInfo.AsReadOnly(); rows = new List<DataObject[]>(); }
private void SetColumnMap(int[] mapping) { reverseColumnMap = new int[Parent.ColumnCount()]; for (int i = 0; i < reverseColumnMap.Length; ++i) { reverseColumnMap[i] = -1; } var parentInfo = Parent.TableInfo; subsetTableInfo = new TableInfo(parentInfo.TableName); for (int i = 0; i < mapping.Length; ++i) { int mapTo = mapping[i]; var origColumnInfo = Parent.TableInfo[mapTo]; var columnInfo = new ColumnInfo(aliases[i].Name, origColumnInfo.ColumnType) { DefaultExpression = origColumnInfo.DefaultExpression, IsNotNull = origColumnInfo.IsNotNull, IndexType = origColumnInfo.IndexType }; subsetTableInfo.AddColumnSafe(columnInfo); reverseColumnMap[mapTo] = i; } subsetTableInfo = subsetTableInfo.AsReadOnly(); }
static TransactionTableContainer() { // SYSTEM.TABLE_INFO TableInfoTableInfo = new TableInfo(SystemSchema.TableInfoTableName); TableInfoTableInfo.AddColumn("catalog", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("schema", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("name", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("type", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("other", PrimitiveTypes.String()); TableInfoTableInfo = TableInfoTableInfo.AsReadOnly(); // SYSTEM.TABLE_COLUMNS TableColumnsTableInfo = new TableInfo(SystemSchema.TableColumnsTableName); TableColumnsTableInfo.AddColumn("schema", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("table", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("column", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("sql_type", PrimitiveTypes.Numeric()); TableColumnsTableInfo.AddColumn("type_desc", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("size", PrimitiveTypes.Numeric()); TableColumnsTableInfo.AddColumn("scale", PrimitiveTypes.Numeric()); TableColumnsTableInfo.AddColumn("not_null", PrimitiveTypes.Boolean()); TableColumnsTableInfo.AddColumn("default", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("index_str", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("seq_no", PrimitiveTypes.Numeric()); TableColumnsTableInfo = TableColumnsTableInfo.AsReadOnly(); // SYSTEM.VARIABLES VariablesTableInfo = new TableInfo(SystemSchema.VariablesTableName); VariablesTableInfo.AddColumn("var", PrimitiveTypes.String()); VariablesTableInfo.AddColumn("type", PrimitiveTypes.String()); VariablesTableInfo.AddColumn("value", PrimitiveTypes.String()); VariablesTableInfo.AddColumn("constant", PrimitiveTypes.Boolean()); VariablesTableInfo.AddColumn("not_null", PrimitiveTypes.Boolean()); VariablesTableInfo.AddColumn("is_set", PrimitiveTypes.Boolean()); VariablesTableInfo = VariablesTableInfo.AsReadOnly(); // SYSTEM.PRODUCT_INFO ProductInfoTableInfo = new TableInfo(SystemSchema.ProductInfoTableName); ProductInfoTableInfo.AddColumn("var", PrimitiveTypes.String()); ProductInfoTableInfo.AddColumn("value", PrimitiveTypes.String()); ProductInfoTableInfo = ProductInfoTableInfo.AsReadOnly(); // SYSTEM.SQL_TYPES SqlTypesTableInfo = new TableInfo(SystemSchema.SqlTypesTableName); SqlTypesTableInfo.AddColumn("TYPE_NAME", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("DATA_TYPE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("PRECISION", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("LITERAL_PREFIX", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("LITERAL_SUFFIX", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("CREATE_PARAMS", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("NULLABLE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("CASE_SENSITIVE", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("SEARCHABLE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("UNSIGNED_ATTRIBUTE", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("FIXED_PREC_SCALE", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("AUTO_INCREMENT", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("LOCAL_TYPE_NAME", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("MINIMUM_SCALE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("MAXIMUM_SCALE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("SQL_DATA_TYPE", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("SQL_DATETIME_SUB", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("NUM_PREC_RADIX", PrimitiveTypes.Numeric()); SqlTypesTableInfo = SqlTypesTableInfo.AsReadOnly(); // SYSTEM.PRIVS PrivilegesTableInfo = new TableInfo(SystemSchema.PrivilegesTableName); PrivilegesTableInfo.AddColumn("priv_bit", PrimitiveTypes.Numeric()); PrivilegesTableInfo.AddColumn("description", PrimitiveTypes.String()); PrivilegesTableInfo = PrivilegesTableInfo.AsReadOnly(); IntTableInfo = new TableInfo[6]; IntTableInfo[0] = TableInfoTableInfo; IntTableInfo[1] = TableColumnsTableInfo; IntTableInfo[2] = ProductInfoTableInfo; IntTableInfo[3] = VariablesTableInfo; IntTableInfo[4] = SqlTypesTableInfo; IntTableInfo[5] = PrivilegesTableInfo; }
public bool AlterTable(TableInfo tableInfo) { tableInfo = tableInfo.AsReadOnly(); var tableName = tableInfo.TableName; // The current schema context is the schema of the table name string currentSchema = tableName.Parent.Name; using (var session = new SystemSession(Transaction, currentSchema)) { using (var context = session.CreateQuery()) { // Get the next unique id of the unaltered table. var nextId = NextUniqueId(tableName); // Drop the current table var cTable = GetTable(tableName); var droppedTableId = cTable.TableInfo.Id; DropTable(tableName); // And create the table table CreateTable(tableInfo); var alteredTable = GetMutableTable(tableName); var source = FindVisibleTable(tableName, false); int alteredTableId = source.TableId; // Set the sequence id of the table source.SetUniqueId(nextId.ToInt64()); // Work out which columns we have to copy to where int[] colMap = new int[tableInfo.ColumnCount]; var origTd = cTable.TableInfo; for (int i = 0; i < colMap.Length; ++i) { string colName = tableInfo[i].ColumnName; colMap[i] = origTd.IndexOfColumn(colName); } // First move all the rows from the old table to the new table, // This does NOT update the indexes. var e = cTable.GetEnumerator(); while (e.MoveNext()) { int rowIndex = e.Current.RowId.RowNumber; var dataRow = alteredTable.NewRow(); for (int i = 0; i < colMap.Length; ++i) { int col = colMap[i]; if (col != -1) { dataRow.SetValue(i, cTable.GetValue(rowIndex, col)); } } dataRow.SetDefault(context); // Note we use a low level 'AddRow' method on the master table // here. This does not touch the table indexes. The indexes are // built later. int newRowNumber = source.AddRow(dataRow); // Set the record as committed added source.WriteRecordState(newRowNumber, RecordState.CommittedAdded); } // TODO: We need to copy any existing index definitions that might // have been set on the table being altered. // Rebuild the indexes in the new master table, source.BuildIndexes(); // Get the snapshot index set on the new table and set it here SetIndexSetForTable(source, source.CreateIndexSet()); // Flush this out of the table cache FlushTableCache(tableName); // Ensure the native sequence generator exists... Transaction.RemoveNativeSequence(tableName); Transaction.CreateNativeSequence(tableName); // Notify that this database object has been successfully dropped and // created. Transaction.Registry.RegisterEvent(new TableDroppedEvent(droppedTableId, tableName)); Transaction.Registry.RegisterEvent(new TableCreatedEvent(alteredTableId, tableName)); return true; } } }
protected virtual void Init(IEnumerable<ITable> tables) { var tablesArray = tables.ToArray(); referenceList = tablesArray; int colCount = ColumnCount; indexes = new ColumnIndex[colCount]; vtTableInfo = new TableInfo(new ObjectName("#VIRTUAL TABLE#")); // Generate look up tables for column_table and column_filter information columnTable = new int[colCount]; columnFilter = new int[colCount]; int index = 0; for (int i = 0; i < referenceList.Length; ++i) { var curTable = referenceList[i]; var curTableInfo = curTable.TableInfo; int refColCount = curTable.ColumnCount(); // For each column for (int n = 0; n < refColCount; ++n) { columnFilter[index] = n; columnTable[index] = i; ++index; // Add this column to the data table info of this table. var columnInfo = curTableInfo[n]; var newColumnInfo = new ColumnInfo(columnInfo.ColumnName, columnInfo.ColumnType) { DefaultExpression = columnInfo.DefaultExpression, IsNotNull = columnInfo.IsNotNull, IndexType = columnInfo.IndexType }; vtTableInfo.AddColumnSafe(newColumnInfo); } } vtTableInfo = vtTableInfo.AsReadOnly(); }
public static TemporaryTable SingleColumnTable(IContext database, string columnName, SqlType columnType) { var tableInfo = new TableInfo(new ObjectName("single")); tableInfo.AddColumn(columnName, columnType); tableInfo = tableInfo.AsReadOnly(); return new TemporaryTable(database, tableInfo); }
static SystemSchema() { // SYSTEM.TABLE_INFO TableInfoTableInfo = new TableInfo(TableInfoTableName); TableInfoTableInfo.AddColumn("catalog", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("schema", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("name", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("type", PrimitiveTypes.String()); TableInfoTableInfo.AddColumn("other", PrimitiveTypes.String()); TableInfoTableInfo = TableInfoTableInfo.AsReadOnly(); // SYSTEM.TABLE_COLUMNS TableColumnsTableInfo = new TableInfo(TableColumnsTableName); TableColumnsTableInfo.AddColumn("schema", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("table", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("column", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("sql_type", PrimitiveTypes.Numeric()); TableColumnsTableInfo.AddColumn("type_desc", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("size", PrimitiveTypes.Numeric()); TableColumnsTableInfo.AddColumn("scale", PrimitiveTypes.Numeric()); TableColumnsTableInfo.AddColumn("not_null", PrimitiveTypes.Boolean()); TableColumnsTableInfo.AddColumn("default", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("index_str", PrimitiveTypes.String()); TableColumnsTableInfo.AddColumn("seq_no", PrimitiveTypes.Numeric()); TableColumnsTableInfo = TableColumnsTableInfo.AsReadOnly(); // SYSTEM.VARIABLES VariablesTableInfo = new TableInfo(VariablesTableName); VariablesTableInfo.AddColumn("var", PrimitiveTypes.String()); VariablesTableInfo.AddColumn("type", PrimitiveTypes.String()); VariablesTableInfo.AddColumn("value", PrimitiveTypes.String()); VariablesTableInfo.AddColumn("constant", PrimitiveTypes.Boolean()); VariablesTableInfo.AddColumn("not_null", PrimitiveTypes.Boolean()); VariablesTableInfo.AddColumn("is_set", PrimitiveTypes.Boolean()); VariablesTableInfo = VariablesTableInfo.AsReadOnly(); // SYSTEM.PRODUCT_INFO ProductInfoTableInfo = new TableInfo(ProductInfoTableName); ProductInfoTableInfo.AddColumn("var", PrimitiveTypes.String()); ProductInfoTableInfo.AddColumn("value", PrimitiveTypes.String()); ProductInfoTableInfo = ProductInfoTableInfo.AsReadOnly(); // SYSTEM.STATS StatisticsTableInfo = new TableInfo(StatisticsTableName); StatisticsTableInfo.AddColumn("stat_name", PrimitiveTypes.String()); StatisticsTableInfo.AddColumn("value", PrimitiveTypes.String()); StatisticsTableInfo = StatisticsTableInfo.AsReadOnly(); // SYSTEM.SQL_TYPES SqlTypesTableInfo = new TableInfo(SqlTypesTableName); SqlTypesTableInfo.AddColumn("TYPE_NAME", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("DATA_TYPE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("PRECISION", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("LITERAL_PREFIX", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("LITERAL_SUFFIX", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("CREATE_PARAMS", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("NULLABLE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("CASE_SENSITIVE", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("SEARCHABLE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("UNSIGNED_ATTRIBUTE", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("FIXED_PREC_SCALE", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("AUTO_INCREMENT", PrimitiveTypes.Boolean()); SqlTypesTableInfo.AddColumn("LOCAL_TYPE_NAME", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("MINIMUM_SCALE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("MAXIMUM_SCALE", PrimitiveTypes.Numeric()); SqlTypesTableInfo.AddColumn("SQL_DATA_TYPE", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("SQL_DATETIME_SUB", PrimitiveTypes.String()); SqlTypesTableInfo.AddColumn("NUM_PREC_RADIX", PrimitiveTypes.Numeric()); SqlTypesTableInfo = SqlTypesTableInfo.AsReadOnly(); // SYSTEM.OPEN_SESSIONS OpenSessionsTableInfo = new TableInfo(OpenSessionsTableName); OpenSessionsTableInfo.AddColumn("username", PrimitiveTypes.String()); OpenSessionsTableInfo.AddColumn("host_string", PrimitiveTypes.String()); OpenSessionsTableInfo.AddColumn("last_command", PrimitiveTypes.DateTime()); OpenSessionsTableInfo.AddColumn("time_connected", PrimitiveTypes.DateTime()); OpenSessionsTableInfo = OpenSessionsTableInfo.AsReadOnly(); // SYSTEM.SESSION_INFO SessionInfoTableInfo = new TableInfo(SessionInfoTableName); SessionInfoTableInfo.AddColumn("var", PrimitiveTypes.String()); SessionInfoTableInfo.AddColumn("value", PrimitiveTypes.String()); SessionInfoTableInfo = SessionInfoTableInfo.AsReadOnly(); // SYSTEM.PRIVS PrivilegesTableInfo = new TableInfo(PrivilegesTableName); PrivilegesTableInfo.AddColumn("priv_bit", PrimitiveTypes.Numeric()); PrivilegesTableInfo.AddColumn("description", PrimitiveTypes.String()); PrivilegesTableInfo = PrivilegesTableInfo.AsReadOnly(); }
private static TableInfo CreateTableInfo(string schema, string name) { // Create the TableInfo that describes this entry var info = new TableInfo(new ObjectName(new ObjectName(schema), name)); // Add column definitions info.AddColumn("type", PrimitiveTypes.String()); info.AddColumn("location", PrimitiveTypes.String()); info.AddColumn("return_type", PrimitiveTypes.String()); info.AddColumn("param_args", PrimitiveTypes.String()); info.AddColumn("owner", PrimitiveTypes.String()); return info.AsReadOnly(); }
private static void CreateSecurityTables(IQuery context) { var tableInfo = new TableInfo(UserTableName); tableInfo.AddColumn("name", PrimitiveTypes.String()); // TODO: User table must be completed ... tableInfo = tableInfo.AsReadOnly(); context.CreateSystemTable(tableInfo); context.AddPrimaryKey(UserTableName, new [] { "name" }, "SYSTEM_USER_PK"); tableInfo = new TableInfo(PasswordTableName); tableInfo.AddColumn("user", PrimitiveTypes.String()); tableInfo.AddColumn("method", PrimitiveTypes.String()); tableInfo.AddColumn("method_args", PrimitiveTypes.Binary()); tableInfo.AddColumn("identifier", PrimitiveTypes.String()); tableInfo = tableInfo.AsReadOnly(); context.CreateSystemTable(tableInfo); tableInfo = new TableInfo(UserGroupTableName); tableInfo.AddColumn("user", PrimitiveTypes.String()); tableInfo.AddColumn("group", PrimitiveTypes.String()); tableInfo.AddColumn("admin", PrimitiveTypes.Boolean()); tableInfo = tableInfo.AsReadOnly(); context.CreateSystemTable(tableInfo); tableInfo = new TableInfo(GroupsTableName); tableInfo.AddColumn("name", PrimitiveTypes.String(), true); tableInfo = tableInfo.AsReadOnly(); context.CreateSystemTable(tableInfo); context.AddPrimaryKey(GroupsTableName, new[] { "name" }, "SYSTEM_GROUP_PK"); tableInfo = new TableInfo(UserGrantsTableName); tableInfo.AddColumn("priv_bit", PrimitiveTypes.Numeric()); tableInfo.AddColumn("object", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("user", PrimitiveTypes.String()); tableInfo.AddColumn("grant_option", PrimitiveTypes.Boolean()); tableInfo.AddColumn("granter", PrimitiveTypes.String()); tableInfo = tableInfo.AsReadOnly(); context.CreateSystemTable(tableInfo); tableInfo = new TableInfo(GroupGrantsTable); tableInfo.AddColumn("priv_bit", PrimitiveTypes.Numeric()); tableInfo.AddColumn("object", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("group", PrimitiveTypes.String()); tableInfo.AddColumn("grant_option", PrimitiveTypes.Boolean()); tableInfo.AddColumn("granter", PrimitiveTypes.String()); var fkCol = new[] { "user" }; var gfkCol = new[] { "group" }; var refCol = new[] { "name" }; const ForeignKeyAction onUpdate = ForeignKeyAction.NoAction; const ForeignKeyAction onDelete = ForeignKeyAction.Cascade; context.AddForeignKey(PasswordTableName, fkCol, UserTableName, refCol, onDelete, onUpdate, "USER_PASSWORD_FK"); context.AddForeignKey(UserGroupTableName, fkCol, UserTableName, refCol, onDelete, onUpdate, "USER_PRIV_FK"); context.AddForeignKey(UserGroupTableName, gfkCol, GroupsTableName, refCol, onDelete, onUpdate, "USER_GROUP_FK"); context.AddForeignKey(UserGrantsTableName, fkCol, UserTableName, refCol, onDelete, onUpdate, "USER_GRANTS_FK"); context.AddForeignKey(GroupGrantsTable, gfkCol, GroupsTableName, refCol, onDelete, onUpdate, "GROUP_GRANTS_FK"); }
private static void CreateSecurityTables(IQueryContext context) { var tableInfo = new TableInfo(UserTableName); tableInfo.AddColumn("name", PrimitiveTypes.String()); // TODO: User table must be completed ... tableInfo = tableInfo.AsReadOnly(); context.CreateTable(tableInfo); context.AddPrimaryKey(UserTableName, new []{"name"}, "SYSTEM_USER_PK"); tableInfo = new TableInfo(PasswordTableName); tableInfo.AddColumn("user", PrimitiveTypes.String()); tableInfo.AddColumn("type", PrimitiveTypes.Numeric()); tableInfo.AddColumn("hash", PrimitiveTypes.String()); tableInfo.AddColumn("salt", PrimitiveTypes.String()); tableInfo.AddColumn("hash_algorithm", PrimitiveTypes.String()); tableInfo = tableInfo.AsReadOnly(); context.CreateTable(tableInfo); tableInfo = new TableInfo(UserPrivilegesTableName); tableInfo.AddColumn("user", PrimitiveTypes.String()); tableInfo.AddColumn("group", PrimitiveTypes.String()); tableInfo = tableInfo.AsReadOnly(); context.CreateTable(tableInfo); tableInfo = new TableInfo(UserConnectPrivilegesTableName); tableInfo.AddColumn("user", PrimitiveTypes.String()); tableInfo.AddColumn("protocol", PrimitiveTypes.String()); tableInfo.AddColumn("host", PrimitiveTypes.String()); tableInfo.AddColumn("access", PrimitiveTypes.Boolean()); tableInfo = tableInfo.AsReadOnly(); context.CreateTable(tableInfo); tableInfo = new TableInfo(UserGrantsTableName); tableInfo.AddColumn("priv_bit", PrimitiveTypes.Numeric()); tableInfo.AddColumn("object", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("user", PrimitiveTypes.String()); tableInfo.AddColumn("grant_option", PrimitiveTypes.Boolean()); tableInfo.AddColumn("granter", PrimitiveTypes.String()); tableInfo = tableInfo.AsReadOnly(); context.CreateTable(tableInfo); var fkCol = new[] {"user"}; var refCol = new[] {"name"}; const ForeignKeyAction onUpdate = ForeignKeyAction.NoAction; const ForeignKeyAction onDelete = ForeignKeyAction.Cascade; context.AddForeignKey(PasswordTableName, fkCol, UserTableName, refCol, onDelete, onUpdate, "USER_PASSWORD_FK"); context.AddForeignKey(UserPrivilegesTableName, fkCol, UserTableName, refCol, onDelete, onUpdate, "USER_PRIV_FK"); context.AddForeignKey(UserConnectPrivilegesTableName, fkCol, UserTableName, refCol, onDelete, onUpdate, "USER_CONNPRIV_FK"); context.AddForeignKey(UserGrantsTableName, fkCol, UserTableName, refCol, onDelete, onUpdate, "USER_GRANTS_FK"); }
private static TableInfo CreateTableInfo(ObjectName schema, string name) { var info = new TableInfo(new ObjectName(schema, name)); info.AddColumn("last_value", PrimitiveTypes.Numeric()); info.AddColumn("current_value", PrimitiveTypes.Numeric()); info.AddColumn("top_value", PrimitiveTypes.Numeric()); info.AddColumn("increment_by", PrimitiveTypes.Numeric()); info.AddColumn("min_value", PrimitiveTypes.Numeric()); info.AddColumn("max_value", PrimitiveTypes.Numeric()); info.AddColumn("start", PrimitiveTypes.Numeric()); info.AddColumn("cache", PrimitiveTypes.Numeric()); info.AddColumn("cycle", PrimitiveTypes.Boolean()); info = info.AsReadOnly(); return info; }
public void Create() { // SYSTEM.PKEY_INFO var tableInfo = new TableInfo(SystemSchema.PrimaryKeyInfoTableName); tableInfo.AddColumn("id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("schema", PrimitiveTypes.String()); tableInfo.AddColumn("table", PrimitiveTypes.String()); tableInfo.AddColumn("deferred", PrimitiveTypes.Numeric()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); // SYSTEM.PKEY_COLS tableInfo = new TableInfo(SystemSchema.PrimaryKeyColumnsTableName); tableInfo.AddColumn("pk_id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("column", PrimitiveTypes.String()); tableInfo.AddColumn("seq_no", PrimitiveTypes.Numeric()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); // SYSTEM.FKEY_INFO tableInfo = new TableInfo(SystemSchema.ForeignKeyInfoTableName); tableInfo.AddColumn("id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("schema", PrimitiveTypes.String()); tableInfo.AddColumn("table", PrimitiveTypes.String()); tableInfo.AddColumn("ref_schema", PrimitiveTypes.String()); tableInfo.AddColumn("ref_table", PrimitiveTypes.String()); tableInfo.AddColumn("update_rule", PrimitiveTypes.Numeric()); tableInfo.AddColumn("delete_rule", PrimitiveTypes.Numeric()); tableInfo.AddColumn("deferred", PrimitiveTypes.Numeric()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); // SYSTEM.FKEY_COLS tableInfo = new TableInfo(SystemSchema.ForeignKeyColumnsTableName); tableInfo.AddColumn("fk_id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("fcolumn", PrimitiveTypes.String()); tableInfo.AddColumn("pcolumn", PrimitiveTypes.String()); tableInfo.AddColumn("seq_no", PrimitiveTypes.Numeric()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); // SYSTEM.UNIQUE_INFO tableInfo = new TableInfo(SystemSchema.UniqueKeyInfoTableName); tableInfo.AddColumn("id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("schema", PrimitiveTypes.String()); tableInfo.AddColumn("table", PrimitiveTypes.String()); tableInfo.AddColumn("deferred", PrimitiveTypes.Numeric()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); // SYSTEM.UNIQUE_COLS tableInfo = new TableInfo(SystemSchema.UniqueKeyColumnsTableName); tableInfo.AddColumn("un_id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("column", PrimitiveTypes.String()); tableInfo.AddColumn("seq_no", PrimitiveTypes.Numeric()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); // SYSTEM.CHECK_INFO tableInfo = new TableInfo(SystemSchema.CheckInfoTableName); tableInfo.AddColumn("id", PrimitiveTypes.Numeric()); tableInfo.AddColumn("name", PrimitiveTypes.String()); tableInfo.AddColumn("schema", PrimitiveTypes.String()); tableInfo.AddColumn("table", PrimitiveTypes.String()); tableInfo.AddColumn("expression", PrimitiveTypes.String()); tableInfo.AddColumn("deferred", PrimitiveTypes.Numeric()); tableInfo.AddColumn("serialized_expression", PrimitiveTypes.Binary()); tableInfo = tableInfo.AsReadOnly(); Transaction.CreateTable(tableInfo); }