/// <summary> /// Creates a schema from another schema /// </summary> /// <param name="S">The starting point schema</param> /// <param name="K">A key representing the columns to keep</param> /// <returns>A schema</returns> public static Schema Split(Schema S, Key K) { Schema s = new Schema(); for (int i = 0; i < K.Count; i++) { s.Add(S.ColumnName(K[i]), S.ColumnAffinity(K[i]), S.ColumnNull(K[i]), S.ColumnSize(K[i])); } return s; }
// Statics // /// <summary> /// Combines two schemas; throws an exception if two columns have the same name. /// </summary> /// <param name="S1">The left schema</param> /// <param name="S2">The right schema</param> /// <returns>A combined schema</returns> public static Schema Join(Schema S1, Schema S2) { Schema s = new Schema(); for (int i = 0; i < S1.Count; i++) { s.Add(S1.ColumnName(i), S1.ColumnAffinity(i), S1.ColumnNull(i), S1.ColumnSize(i)); } for (int i = 0; i < S2.Count; i++) { s.Add(S2.ColumnName(i), S2.ColumnAffinity(i), S2.ColumnNull(i), S2.ColumnSize(i)); } return s; }
// Create // public static CreateTablePlan RenderCreatePlan(Workspace Home, HScriptParser.Crudam_create_tableContext context) { // Build visitor // ExpressionVisitor exp_vis = new ExpressionVisitor(null, Home); // Build the schema // Schema columns = new Schema(); foreach (HScriptParser.Create_table_unitContext ctx in context.create_table_unit()) { columns.Add( ctx.IDENTIFIER().GetText(), VisitorHelper.GetAffinity(ctx.type()), (ctx.expression() == null) ? true : exp_vis.ToNode(ctx.expression()).Evaluate().valueBOOL, VisitorHelper.GetSize(ctx.type(), true)); } string name = context.full_table_name().table_name().GetText(); string db = context.full_table_name().database_name().GetText(); string db_path = Home.Connections[db]; long chunk_size = (context.create_table_size() == null) ? RecordSet.EstimateMaxRecords(columns) : exp_vis.ToNode(context.create_table_size().expression()).Evaluate().valueINT; return new CreateTablePlan(db_path, name, columns, (int)chunk_size); }
public static CreateChunkPlan RenderCreateChunk(Workspace Home, HScriptParser.Crudam_create_tableContext context) { ExpressionVisitor exp_vis = new ExpressionVisitor(null, Home); // Build the schema // Schema columns = new Schema(); foreach (HScriptParser.Create_table_unitContext ctx in context.create_table_unit()) { columns.Add( ctx.IDENTIFIER().GetText(), VisitorHelper.GetAffinity(ctx.type()), (ctx.expression() == null) ? true : exp_vis.ToNode(ctx.expression()).Evaluate().valueBOOL, VisitorHelper.GetSize(ctx.type(), true)); } string name = context.full_table_name().table_name().IDENTIFIER().GetText(); return new CreateChunkPlan(name, columns, Home); }
public static Schema Build(Schema S1, string Alias1, Schema S2, string Alias2, string Delim) { Schema s = new Schema(); for (int i = 0; i < S1.Count; i++) s.Add(Alias1 + Delim + S1.ColumnName(i), S1.ColumnAffinity(i), S1.ColumnNull(i), S1.ColumnSize(i)); for (int i = 0; i < S2.Count; i++) s.Add(Alias2 + Delim + S2.ColumnName(i), S2.ColumnAffinity(i), S2.ColumnNull(i), S2.ColumnSize(i)); return s; }