/// <summary> /// returns the audit <see cref="TableSchema"/> corresponding to /// <paramref name="tableSchema"/>. /// </summary> /// <param name="tableSchema"></param> /// <returns> /// audit <see cref="TableSchema"/> corresponding to /// <paramref name="tableSchema"/> /// </returns> internal static TableSchema GetAuditTableSchema(TableSchema tableSchema) { TableSchema auditTableSchema; string auditTableName = GetAuditTableName(tableSchema.Name); // init audit table ColumnSchema list with _id, queryType, and _id column of original table // named (this.tableName + "Id") List <ColumnSchema> auditColumnSchemas = new List <ColumnSchema>() { ColumnSchema.IdColumnSchema, new IntegerColumnSchema( StringUtils.PascalCaseToCamelCase( QueryTypeTableStructure.TABLE_NAME) + "Id", true), new IntegerColumnSchema( StringUtils.PascalCaseToCamelCase(tableSchema.Name) + "Id", true) }; // add all columns from this table (except for _id which was already accounted for) // with their constraints stripped // get columns from this table ColumnSchema[] strippedColumnSchemas = tableSchema.ColumnSchemas.Subarray <ColumnSchema>( 1, tableSchema.ColumnSchemas.Length); // strip constraints strippedColumnSchemas.ConvertAll <ColumnSchema, ColumnSchema>( columnSchemas => ColumnSchema.GetColumnSchemaWithConstraintsStripped(columnSchemas)); // add stripped columns to audit column schema list auditColumnSchemas.AddRange(strippedColumnSchemas); // an audit table is non-auditable const bool auditable = false; // init audit table schema auditTableSchema = new TableSchema( auditTableName, auditColumnSchemas.ToArray(), ColumnSchema.IdColumnSchema, auditable); return(auditTableSchema); }