// 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); }
// Get the value of a relation by importing some other format // Entry previously created by peeking public bool ImportRelvar(string source, string name, string what, string locator) { var entry = GlobalVars.FindEntry(name); Logger.Assert(entry != null, name); var heading = entry.DataType.Heading; var stream = DataSourceStream.Create(source, locator); var table = stream.Read(what, heading); if (table == null || !heading.Equals(table.Heading)) { throw ProgramError.Fatal("Catalog", "{0} table not found: '{1}'", source, stream.GetPath(what)); } GlobalVars.SetValue(entry, RelationValue.Create(table)); return(true); }