public static void SaveAllStubs(string dir, IEnumerable <DataHolderDefinition> dataHolderDefs) { foreach (DataHolderDefinition dataHolderDef in dataHolderDefs) { LightDBMgr.SaveDefinitionStub(Path.Combine(dir, dataHolderDef.Name + ".xml"), dataHolderDef); } }
public static void MapFlatSimple(this LightDBDefinitionSet defs, IDataField dataField, IDataFieldDefinition fieldDef, Dictionary <string, List <SimpleDataColumn> > mappedFields) { SimpleFlatFieldDefinition fieldDef1 = (SimpleFlatFieldDefinition)fieldDef; LightDBMgr.AddMapping(defs, defs.GetDefaultTables(dataField.DataHolderDefinition), fieldDef1, mappedFields, (IFlatDataFieldAccessor)dataField, dataField.MappedMember); }
public static void OnInvalidData(string msg, params object[] args) { msg = string.Format(msg, args); if (LightDBMgr.InvalidDataHandler == null) { throw new DataHolderException(msg, new object[0]); } LightDBMgr.InvalidDataHandler(msg); }
private void RegisterDefintion(LightRecordXmlConfig cfg, Dictionary <string, List <SimpleDataColumn> > fieldMap) { var dataHolders = DataHolderDefinitions; XmlDataHolderDefinition lastDef = null; foreach (XmlDataHolderDefinition dataRawDef in cfg) { try { if (dataRawDef.Name == null) { throw new DataHolderException("Invalid DataHolder-definition has no name ({0}).", lastDef == null ? "First in file" : "After: " + lastDef); } dataRawDef.EnsureFieldsNotNull(); var dataDef = dataHolders.Where(def => def.Name.Equals(dataRawDef.Name, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); if (dataDef == null) { LightDBMgr.OnInvalidData("Invalid DataHolder-definition refers to non-existing DataHolder: " + dataRawDef.Name); continue; } TableDefinition[] oldTables, defaultTables; // Set DefaultTable //if (dataRawDef.DefaultTables == null) //{ // throw new DataHolderException("DataHolder-definition did not specify any DefaultTable(s): " + dataRawDef); //} if (DefaultTables.TryGetValue(dataDef.Name, out defaultTables)) { oldTables = defaultTables; } else { oldTables = null; if (dataRawDef.DefaultTables != null) { defaultTables = new TableDefinition[dataRawDef.DefaultTables.Length]; } else { defaultTables = new TableDefinition[0]; } } for (var i = 0; i < defaultTables.Length; i++) { var tableName = dataRawDef.DefaultTables[i].Trim(); TableDefinition defaultTable; if (!TableDefinitionMap.TryGetValue(tableName, out defaultTable)) { throw new DataHolderException("DefaultTable \"{0}\" of DataHolder \"{1}\" is not defined - " + "Make sure to define the table in the Table collection.", tableName, dataRawDef); } //if (DefaultTables.ContainsKey(dataDef.Name)) //{ // throw new DataHolderException("Found duplicate DataHolder-definition: " + dataDef.Name + " ({0})", cfg.FileName); //} defaultTables[i] = defaultTable; defaultTable.SetMainDataHolder(dataDef, true); } DefaultTables[dataDef.Name] = defaultTables; if (dataRawDef.DataHolderName.Contains("Trainer")) { ToString(); } AddFieldMappings(dataRawDef.Fields, dataDef.Fields, fieldMap); if (oldTables != null) { var offset = oldTables.Length; Array.Resize(ref oldTables, oldTables.Length + defaultTables.Length); Array.Copy(defaultTables, 0, oldTables, offset, defaultTables.Length); DefaultTables[dataDef.Name] = oldTables; } lastDef = dataRawDef; } catch (Exception e) { throw new DataHolderException(e, "Failed to parse DataHolder-definition \"" + dataRawDef + "\" from {0}", cfg.FileName); } } }
private void FinishLoading(Dictionary <string, List <SimpleDataColumn> > fieldMap) { // bind mapping-objects to tables foreach (var pair in fieldMap) { var table = GetTable(pair.Key); var fields = pair.Value.ToArray(); if (!string.IsNullOrEmpty(table.MainDataHolderName)) { DataHolderDefinition defaultDef = DataHolderDefinitions.Where(dataHolderDef => dataHolderDef.Name.Equals(table.MainDataHolderName, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); if (defaultDef == null) { throw new DataHolderException("Table \"{0}\" refered to invalid MainDataHolder: {1}", table, table.MainDataHolderName); } table.SetMainDataHolder(defaultDef, false); } try { var primCols = new List <PrimaryColumn>(); primCols.AddRange(table.PrimaryColumns); // find Primary Columns, set defaults and consider depending fields for (var i = 0; i < fields.Length; i++) { var field = fields[i]; var col = primCols.Where(primCol => primCol.Name == field.ColumnName).FirstOrDefault(); if (col != null) { col.DataColumn = field; field.IsPrimaryKey = true; primCols.Remove(col); //var tmp = fields[0]; //fields[0] = field; //fields[i] = tmp; } if (field.ColumnName == null && field.DefaultValue == null) { LightDBMgr.OnInvalidData("Field-definition \"{0}\" did not define a Column nor a DefaultValue.", field); } } // put the depending Fields first (if any) for (var i = 0; i < fields.Length; i++) { var field = fields[i]; for (var j = 0; j < field.FieldList.Count; j++) { var dataField = field.FieldList[j]; var dataHolder = dataField.DataHolderDefinition; if (dataHolder.DependingField == dataField) { var tmp = fields[0]; fields[0] = field; fields[i] = tmp; } } } //if (primCols.Count() > 0) //{ // throw new DataHolderException("Table-definition \"{0}\" refered to non-existing PrimaryKey(s): {1}", // pair.Key, primCols.ToString(", ")); //} if (primCols.Count > 0 && table.MainDataHolder == null) { throw new DataHolderException("Table \"{0}\" referenced PrimaryColumn(s) ({1}) but did not define a MainDataHolder explicitely.", table, primCols.ToString(", ")); } // custom primary columns and variables if (primCols.Count > 0 || (table.Variables != null && table.Variables.Length > 0)) { var varCount = table.Variables != null ? table.Variables.Length : 0; var extraFields = varCount + primCols.Count; var tmpArr = new SimpleDataColumn[fields.Length + extraFields]; Array.Copy(fields, 0, tmpArr, extraFields, fields.Length); fields = tmpArr; if (varCount > 0) { InitVars(table, fields); } var i = varCount; foreach (var primaryCol in primCols) { // PrimaryKey-field is not explicitely mapped but only used as a reference var proxyField = new DataFieldProxy(primaryCol.Name, table.MainDataHolder); var reader = Converters.GetReader(primaryCol.TypeName); if (reader == null) { throw new DataHolderException("Invalid Type \"" + primaryCol.TypeName + "\" for PrimaryColumn \"" + primaryCol.Name + "\" in definition for Table: " + table + " - " + "You must explicitely define the TypeName attribute inside the PrimaryColumn node, if it is only an additional table for a DataHolder!"); } var col = new SimpleDataColumn(primaryCol.Name, reader, 0) { IsPrimaryKey = true }; col.FieldList.Add(proxyField); fields[i++] = primaryCol.DataColumn = col; } } var index = 0; for (var i = 0; i < fields.Length; i++) { var field = fields[i]; if (field.DefaultValue == null) { field.m_index = index++; } else { field.Reader = null; } } TableDefinitionMap[pair.Key].ColumnDefinitions = fields; } catch (Exception ex) { throw new DataHolderException(ex, "Unable to setup Table \"{0}\" (MainDataHolder: \"{1}\")", table, table.MainDataHolder); } } m_mappings = CreateDataHolderTableMappings(m_tableDataHolderMap, DataHolderDefinitions); }