コード例 #1
0
            /// <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);
            }