Example #1
0
        // 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);
        }
Example #2
0
        // 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);
        }
Example #3
0
        // 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);
        }
Example #4
0
        // factories -------------------------------------------------------

        // Create new empty table
        public new static DataTableLocal Create(DataHeading heading)
        {
            DataTableLocal newtable = new DataTableLocal()
            {
                DataType = DataTypeRelation.Get(heading),
            };

            return(newtable);
        }
Example #5
0
        // 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);
        }
Example #6
0
        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());
        }
Example #7
0
        // 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);
        }
Example #8
0
        // 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);
        }
Example #9
0
 // 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);
 }
Example #10
0
        // 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);
        }