Exemple #1
0
 public static void SaveAllStubs(string dir, IEnumerable <DataHolderDefinition> dataHolderDefs)
 {
     foreach (DataHolderDefinition dataHolderDef in dataHolderDefs)
     {
         LightDBMgr.SaveDefinitionStub(Path.Combine(dir, dataHolderDef.Name + ".xml"), dataHolderDef);
     }
 }
Exemple #2
0
        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);
        }
Exemple #3
0
 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);
        }