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; }
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); }
/// <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; }