public override DataVar InternalExecute(ServerProcess AProcess, DataVar[] AArguments) { if (AProcess.ServerSession.Server.Catalog.Generators == null) // if not set already { // check for existing table named Datphor.Generators Schema.TableVar LTableVar = (Schema.TableVar)Compiler.ResolveCatalogIdentifier(AProcess.Plan, "System.Generators", false); if (LTableVar == null) // if system.generators doesn't already exist { // get device Schema.Device LDevice = AArguments.Length > 0 ? (Schema.Device)Compiler.ResolveCatalogIdentifier(AProcess.Plan, AArguments[0].Value.AsString, true) : Language.D4.Compiler.GetDefaultDevice(AProcess.Plan, true); // make sure the device is started so that DeviceScalarTypes is filled AProcess.EnsureDeviceStarted(LDevice); // create table type Schema.TableType LTableType = new Schema.TableType(); // use System.String if available else System.IString if (LDevice.DeviceScalarTypes.Contains(AProcess.Plan.Catalog.DataTypes.SystemIString)) { LTableType.Columns.Add(new Schema.Column("ID", AProcess.Plan.Catalog.DataTypes.SystemIString)); } else { LTableType.Columns.Add(new Schema.Column("ID", AProcess.Plan.Catalog.DataTypes.SystemString)); } LTableType.Columns.Add(new Schema.Column("NextKey", AProcess.Plan.Catalog.DataTypes.SystemInteger)); // create table LTableVar = new Schema.BaseTableVar("System.Generators", LTableType, LDevice); MetaData LMetaData = new MetaData(); LMetaData.Tags.Add(new Tag("Storage.Length", "200", false, true)); LTableVar.Columns.Add(new Schema.TableVarColumn(LTableType.Columns["ID"], LMetaData)); LTableVar.Columns.Add(new Schema.TableVarColumn(LTableType.Columns["NextKey"])); LTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { LTableVar.Columns["ID"] })); LTableVar.Owner = AProcess.Plan.User; LTableVar.Library = AProcess.Plan.CurrentLibrary; LTableVar.AddDependency(LDevice); LTableVar.AddDependency((Schema.ScalarType)LTableVar.Columns[0].DataType); LTableVar.AddDependency((Schema.ScalarType)LTableVar.Columns[1].DataType); Compiler.Bind(AProcess.Plan, new CreateTableNode((Schema.BaseTableVar)LTableVar)).Execute(AProcess); if (AProcess.Plan.User.ID == Server.Server.CAdminUserID) { Schema.Group LGroup = AProcess.Plan.Catalog.Groups[Server.Server.CUserGroupName]; LGroup.GrantRight(LTableVar.Rights.Select, true); LGroup.GrantRight(LTableVar.Rights.Insert, true); LGroup.GrantRight(LTableVar.Rights.Update, true); } } // set generator table SystemSetGeneratorsNode.SetGenerator(AProcess, LTableVar); } return(null); }
public override Schema.Catalog GetDeviceCatalog(ServerProcess process, Schema.Catalog serverCatalog, Schema.TableVar tableVar) { Schema.Catalog catalog = base.GetDeviceCatalog(process, serverCatalog, tableVar); using (Plan plan = new Plan(process)) { // Need to support reverse lookup to determine the scalar type for a given native type Type[] types = typeof(Base).Assembly.GetTypes(); foreach (Type type in types) { // create a table var for each DomainResource descendent if (type.IsSubclassOf(typeof(DomainResource))) { if (!type.IsGenericTypeDefinition) { string tableName = Schema.Object.Qualify(ToFHIRTableName(type.Name), plan.CurrentLibrary.Name); if (tableVar == null || Schema.Object.NamesEqual(tableName, tableVar.Name)) { Schema.BaseTableVar localTableVar = new Schema.BaseTableVar(tableName, null); localTableVar.Owner = plan.User; localTableVar.Library = plan.CurrentLibrary; localTableVar.Device = this; localTableVar.MetaData = new MetaData(); // with a FHIR.ResourceType tag localTableVar.MetaData.Tags.Add(new Tag("FHIR.ResourceType", type.Name)); localTableVar.AddDependency(this); localTableVar.DataType = new Schema.TableType(); var d4TypeName = Schema.Object.Qualify(GenerateTypesNode.GetD4TypeName(type.FullName), "FHIR.Core"); var d4Type = Compiler.ResolveCatalogIdentifier(plan, d4TypeName, false) as Schema.ScalarType; if (d4Type != null) { AddColumnsForType(localTableVar, d4Type); localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["Id"] })); catalog.Add(localTableVar); } } } } } return(catalog); } }
public override Schema.Catalog GetDeviceCatalog(ServerProcess process, Schema.Catalog serverCatalog, Schema.TableVar tableVar) { Schema.Catalog catalog = base.GetDeviceCatalog(process, serverCatalog, tableVar); using (Plan plan = new Plan(process)) { // Need to support reverse lookup to determine the scalar type for a given native type Type[] types = typeof(Authority).Assembly.GetTypes(); foreach (Type type in types) { // create a table var for each class if (type.IsClass && type.GetField("id") != null) { if (!type.IsGenericTypeDefinition) { string tableName = Schema.Object.Qualify(ToPHINVADSTableName(type.Name), plan.CurrentLibrary.Name); if (tableVar == null || Schema.Object.NamesEqual(tableName, tableVar.Name)) { Schema.BaseTableVar localTableVar = new Schema.BaseTableVar(tableName, null); localTableVar.Owner = plan.User; localTableVar.Library = plan.CurrentLibrary; localTableVar.Device = this; localTableVar.MetaData = new MetaData(); // with a FHIR.ResourceType tag localTableVar.MetaData.Tags.Add(new Tag("PHINVADS.ResourceType", type.Name)); localTableVar.AddDependency(this); localTableVar.DataType = new Schema.TableType(); var d4TypeName = Schema.Object.Qualify(GenerateTypesNode.GetD4TypeName(type.FullName), "PHINVADS.Core"); var d4Type = Compiler.ResolveCatalogIdentifier(plan, d4TypeName, false) as Schema.ScalarType; if (d4Type != null) { AddColumnsForType(localTableVar, d4Type); localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["id"] })); switch (type.Name) { case "CodeSystem": localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["oid"] })); localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["codeSystemCode"] })); localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["hl70396Identifier"] })); break; case "CodeSystemConcept": localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["codeSystemOid"], localTableVar.Columns["conceptCode"] })); break; case "ValueSet": localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["oid"] })); localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["code"] })); break; case "ValueSetConcept": localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["codeSystemOid"], localTableVar.Columns["conceptCode"] })); localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["valueSetVersionId"], localTableVar.Columns["conceptCode"] })); break; case "ValueSetVersion": localTableVar.Keys.Add(new Schema.Key(new Schema.TableVarColumn[] { localTableVar.Columns["valueSetOid"], localTableVar.Columns["versionNumber"] })); break; } catalog.Add(localTableVar); } } } } } return(catalog); } }