public static void ProcessSchema(AstRootNode astRootNode, AstSchemaNode schemaNode) { const string PackageTypeName = "Schema"; var packageNode = new AstPackageNode(schemaNode.ParentItem); packageNode.Name = schemaNode.Name; packageNode.PackageType = PackageTypeName; var executeSqlNode = new AstExecuteSqlTaskNode(packageNode) { Name = schemaNode.Name, Connection = schemaNode.Connection, ResultSet = ExecuteSqlResultSet.None }; executeSqlNode.Query = new AstExecuteSqlQueryNode(executeSqlNode) { QueryType = QueryType.Standard, Body = new TemplatePlatformEmitter("CreateSchema", schemaNode.Name).Emit() }; packageNode.Tasks.Add(executeSqlNode); bool hasPermissions = false; var permissionBuilder = new StringBuilder(); foreach (var permission in schemaNode.Permissions) { hasPermissions = true; permissionBuilder.AppendLine(PermissionsLowerer.ProcessPermission(schemaNode, permission)); } if (hasPermissions) { var permissionsExecuteSqlTask = new AstExecuteSqlTaskNode(packageNode) { Name = "__SetPermissions", Connection = schemaNode.Connection, }; permissionsExecuteSqlTask.Query = new AstExecuteSqlQueryNode(permissionsExecuteSqlTask) { Body = permissionBuilder.ToString(), QueryType = QueryType.Standard }; packageNode.Tasks.Add(permissionsExecuteSqlTask); } if (schemaNode.CustomExtensions != null) { packageNode.Tasks.Add(schemaNode.CustomExtensions); } astRootNode.Packages.Add(packageNode); }
public AstTableNode GetFileSchema() { //default the schema to "File" AstSchemaNode astSchemaNode = new AstSchemaNode(null) { Name = "File", ForceDisableIncrementalChangeTracking = true }; AstTableNode astTableNode = new AstTableNode(null) { Name = this.Name, Schema = astSchemaNode, ForceDisableIncrementalChangeTracking = true }; this.TableNode = astTableNode; Interrogator i = new Interrogator(); List <DestinationColumn> DestinationObject = i.ProcessFile( this.FilePath, this.ColumnDelimiter, this.FirstRowHeader, this.HeaderRowsToSkip, this.TextQualifier); foreach (DestinationColumn col in DestinationObject) { AstTableColumnNode currentColumn = new AstTableColumnNode(astTableNode) { ForceDisableIncrementalChangeTracking = true }; //set up the column currentColumn.Name = col.Name; if (col.MaxLength != null) { currentColumn.Length = int.Parse(col.MaxLength.ToString()); } if (col.Precision != null) { currentColumn.Precision = int.Parse(col.Precision.ToString()); } currentColumn.IsNullable = col.Nullable; //add the column to the table this.TableNode.Columns.Add(currentColumn); } return(this.TableNode); }
public static AstTableNode ToAstTableNode(this DataTable dataTable) { var schema = new AstSchemaNode(null); var table = new AstTableNode(null); schema.Name = dataTable.Rows.OfType <DataRow>().Select(r => r["TABLE_SCHEMA"].ToString()).First(); table.Schema = schema; table.Name = dataTable.Rows.OfType <DataRow>().Select(r => r["TABLE_NAME"].ToString()).First(); foreach (DataRow row in dataTable.Rows) { var column = new AstTableColumnNode(table) { Name = row["COLUMN_NAME"].ToString(), DataType = row["DATA_TYPE"].ToString().GetDbType(), IsNullable = Convert.ToBoolean(row["IS_NULLABLE"].ToString().Replace("YES", "true").Replace("NO", "false")) }; if (!row.IsNull("CHARACTER_MAXIMUM_LENGTH")) { column.Length = Convert.ToInt32(row["CHARACTER_MAXIMUM_LENGTH"]); } if (!row.IsNull("NUMERIC_PRECISION")) { column.Precision = Convert.ToInt32(row["NUMERIC_PRECISION"]); } if (!row.IsNull("NUMERIC_SCALE")) { column.Precision = Convert.ToInt32(row["NUMERIC_SCALE"]); } table.Columns.Add(column); } return(table); }