예제 #1
0
        public void Repoint(Schema OriginalSchema, Schema NewSchema)
        {

            if (this._idx >= OriginalSchema.Count)
                throw new Exception("Original schema is invalid");
            if (OriginalSchema.ColumnAffinity(this._idx) != this._affinity)
                throw new Exception("Original schema is invalid");

            string name = OriginalSchema.ColumnName(this._idx);
            int new_index = NewSchema.ColumnIndex(name);

            if (new_index == -1)
                throw new Exception("New schema is invalid");
            if (NewSchema.ColumnAffinity(new_index) != this._affinity)
                throw new Exception("New schema is invalid");

            this._idx = new_index;

        }
예제 #2
0
 public static FNode Field(Schema Columns, string Name, Register Memory)
 {
     int idx = Columns.ColumnIndex(Name);
     return Field(idx, Columns.ColumnAffinity(idx), Columns.ColumnSize(idx), Memory);
 }
예제 #3
0
        /// <summary>
        /// Renders a string into a key
        /// </summary>
        /// <param name="Columns">The schema that will be used in the key generation</param>
        /// <param name="Text">The key string to be parsed</param>
        /// <returns>A key with defined sort affinities</returns>
        public Key Render(Schema Columns, string Text)
        {

            Columns = Columns ?? new Schema();

            string[] tokens = Text.Split(this._FieldDelims.ToArray());

            Key k = new Key();

            foreach (string t in tokens)
            {

                string[] temp = t.Split(this._AscDescDelims.ToArray(),StringSplitOptions.RemoveEmptyEntries);
                
                // Get the field name //
                string field_or_index = temp[0];
                int idx = Columns.ColumnIndex(field_or_index);
                if (idx == -1)
                {
                    if (!int.TryParse(field_or_index, out idx))
                        throw new Exception("Element passed is neither a field or an index: " + field_or_index);
                }

                // Get the affinity //
                string asc_or_desc = (temp.Length < 2) ? "\0" : temp[1];
                KeyAffinity sort_type = KeyAffinity.Ascending;
                if (this._AscTokens.Contains(asc_or_desc, StringComparer.OrdinalIgnoreCase))
                    sort_type = KeyAffinity.Ascending;
                else if (this._DescTokens.Contains(asc_or_desc, StringComparer.OrdinalIgnoreCase))
                    sort_type = KeyAffinity.Descending;

                k.Add(idx, sort_type);

            }

            return k;

        }