// get the type of a relation from some persistence store // Used during compilation or startup -- if successful, variable will be created with flags // Then use AddRelvar to import the value public DataType GetRelvarType(string source, string what) { var islinked = (source == DefaultDatabaseSource); if (islinked) { if (SqlFlag) { var heading = SqlTarget.Current.GetTableHeading(what); return((heading == null) ? null : DataTypeRelation.Get(heading)); } else { var type = Persist.Create(DatabasePath, false).Peek(what); return(type); } } else { var heading = DataSourceStream.Create(source, SourcePath).Peek(what); if (heading != null) { return(DataTypeRelation.Get(heading)); } } return(null); }
// Create new table with previous as a subquery (ran out of slots) static DataTableSql CreateFromSubquery(DataTableSql table) { var newtable = new DataTableSql { DataType = DataTypeRelation.Get(table.Heading), SqlSelectText = table._gen.SelectAll(table.GetFrom(), table), }; return(newtable); }
// Create new table from a partial query, allow more clauses to be added static DataTableSql CreateFromSql(DataHeading heading, string sql) { var newtable = new DataTableSql { DataType = DataTypeRelation.Get(heading), SqlSelectText = sql, }; return(newtable); }
// factories ------------------------------------------------------- // Create new empty table public new static DataTableLocal Create(DataHeading heading) { DataTableLocal newtable = new DataTableLocal() { DataType = DataTypeRelation.Get(heading), }; return(newtable); }
// Create new base table, assumed to exist public static DataTableSql Create(string name, DataHeading heading) { var ret = new DataTableSql { DataType = DataTypeRelation.Get(heading), TableName = name, }; ret.DataType.ProposeCleanName(name); return(ret); }
public static AddinInfo[] GetAddinInfo() { var addins = new List <AddinInfo>(); addins.Add(AddinInfo.Create("read", 1, DataTypes.Text, "Read")); addins.Add(AddinInfo.Create("write", 1, DataTypes.Void, "Write")); addins.Add(AddinInfo.Create("pause", 1, DataTypes.Void, "Pause")); addins.Add(AddinInfo.Create("fail", 2, DataTypes.Void, "Fail")); addins.Add(AddinInfo.Create("assert", 2, DataTypes.Void, "Assert")); addins.Add(AddinInfo.Create("type", 1, DataTypes.Text, "Type")); addins.Add(AddinInfo.Create("binary", 1, DataTypes.Binary, "Binary")); addins.Add(AddinInfo.Create("bool", 1, DataTypes.Bool, "Bool")); addins.Add(AddinInfo.Create("number", 1, DataTypes.Number, "Number,NumberT")); addins.Add(AddinInfo.Create("time", 1, DataTypes.Time, "Time,TimeD")); //FIX: addins.Add(AddinInfo.Create("text", 1, DataTypes.Text, "Text")); addins.Add(AddinInfo.Create("format", 1, DataTypes.Text, "Format")); addins.Add(AddinInfo.Create("pp", 1, DataTypes.Text, "PrettyPrint")); addins.Add(AddinInfo.Create("length", 1, DataTypes.Number, "Length")); addins.Add(AddinInfo.Create("fill", 2, DataTypes.Text, "Fill")); addins.Add(AddinInfo.Create("trim", 1, DataTypes.Text, "Trim")); addins.Add(AddinInfo.Create("left", 2, DataTypes.Text, "Left")); addins.Add(AddinInfo.Create("right", 2, DataTypes.Text, "Right")); addins.Add(AddinInfo.Create("before", 2, DataTypes.Text, "Before")); addins.Add(AddinInfo.Create("after", 2, DataTypes.Text, "After")); addins.Add(AddinInfo.Create("toupper", 1, DataTypes.Text, "ToUpper")); addins.Add(AddinInfo.Create("tolower", 1, DataTypes.Text, "ToLower")); addins.Add(AddinInfo.Create("bget", 1, DataTypes.Number, "BinaryGet")); addins.Add(AddinInfo.Create("bset", 1, DataTypes.Binary, "BinarySet")); addins.Add(AddinInfo.Create("blength", 1, DataTypes.Binary, "BinaryLength")); addins.Add(AddinInfo.Create("now", 0, DataTypes.Time, "Now")); addins.Add(AddinInfo.Create("date", 1, Builtin.DateValue.StaticDatatype, "FromTime")); addins.Add(AddinInfo.Create("dateymd", 3, Builtin.DateValue.StaticDatatype, "FromYmd")); addins.Add(AddinInfo.Create("year", 1, DataTypes.Number, "Year")); addins.Add(AddinInfo.Create("month", 1, DataTypes.Number, "Month")); addins.Add(AddinInfo.Create("day", 1, DataTypes.Number, "Day")); addins.Add(AddinInfo.Create("dow", 1, DataTypes.Number, "DayOfWeek")); addins.Add(AddinInfo.Create("daysdiff", 2, DataTypes.Number, "DaysDifference")); //addins.Add(AddinInfo.Create("time", 1, DataTypes.Time, "TimeD")); addins.Add(AddinInfo.Create("count", 1, DataTypes.Number, "Count")); addins.Add(AddinInfo.Create("degree", 1, DataTypes.Number, "Degree")); addins.Add(AddinInfo.Create("schema", 1, DataTypeRelation.Get(DataHeading.Create("Name:text", "Type:text")), "Schema")); addins.Add(AddinInfo.Create("seq", 1, DataTypeRelation.Get(DataHeading.Create("N:number")), "Sequence")); addins.Add(AddinInfo.Create("andl_variable", 0, DataTypeRelation.Get(Catalog.CatalogTableHeading(Catalog.CatalogTables.Variable)), "Variables")); addins.Add(AddinInfo.Create("andl_operator", 0, DataTypeRelation.Get(Catalog.CatalogTableHeading(Catalog.CatalogTables.Operator)), "Operators")); addins.Add(AddinInfo.Create("andl_member", 0, DataTypeRelation.Get(Catalog.CatalogTableHeading(Catalog.CatalogTables.Member)), "Members")); return(addins.ToArray()); }
// Create a new relation type for a particular heading // Called once for the generic, then once for each specific public static DataTypeRelation Create(string name, DataHeading heading, TypeFlags flags, ConvertDelegate converter = null, DefaultDelegate defaulter = null) { //var basetype = DataTypes.Table as DataTypeRelation; var dt = new DataTypeRelation { Name = name, Heading = heading, Flags = flags, }; return(dt); }
// create and fill an instance give its rows, columns and values // TODO: optimise? static object GetNativeValue(DataTypeRelation datatype, IEnumerable <DataRow> rows) { var instance = Activator.CreateInstance(datatype.NativeType); var addmethod = datatype.NativeType.GetMethod("Add"); var rowtype = addmethod.GetParameters()[0].ParameterType; foreach (var row in rows) { // use heading from row to ensure correct field order var rowinstance = FillInstance(rowtype, row.Heading.Columns, row.Values); addmethod.Invoke(instance, new object[] { rowinstance }); } return(instance); }
// construct a type from a base name, optional heading and optional user type name public static DataType Derive(DataType basetype, DataHeading heading, string username) { if (basetype == DataTypes.Table) { return(DataTypeRelation.Get(heading)); } if (basetype == DataTypes.Row) { return(DataTypeTuple.Get(heading)); } if (basetype == DataTypes.User) { return(DataTypeUser.Get(username, heading.Columns)); } return(basetype); }
// Get type from dictionary, or create and add // Every relation needs a row type, so make sure they use the same heading public static DataTypeRelation Get(DataHeading heading) { if (_headings.ContainsKey(heading)) { return(_headings[heading]); } var tupletype = DataTypeTuple.Get(heading); var dt = DataTypeRelation.Create("relation", tupletype.Heading, TypeFlags.Variable | TypeFlags.Generated | TypeFlags.HasHeading); dt.Ordinal = _headings.Count + 1; dt.ChildTupleType = tupletype; dt.NativeType = TypeMaker.CreateType(dt); _headings[heading] = dt; var x = Activator.CreateInstance(dt.NativeType); return(dt); }