Exemple #1
0
        public static void MapNestedArray(this LightDBDefinitionSet defs, IDataField dataField,
                                          IDataFieldDefinition fieldDef, Dictionary <string, List <SimpleDataColumn> > mappedFields)
        {
            NestedArrayFieldDefinition arrayFieldDefinition = (NestedArrayFieldDefinition)fieldDef;
            NestedArrayDataField       nestedArrayDataField = (NestedArrayDataField)dataField;

            TableDefinition[] defaultTables =
                defs.EnsureTables(arrayFieldDefinition.Table, dataField.DataHolderDefinition);
            foreach (FlatArrayFieldDefinition segment in arrayFieldDefinition.Segments)
            {
                SimpleFlatFieldDefinition[] columns = segment.GetColumns(nestedArrayDataField.Length);
                for (int index = 0; index < columns.Length; ++index)
                {
                    SimpleFlatFieldDefinition fieldDef1 = columns[index];
                    IDataField dataField1;
                    if (!((NestedArrayAccessor)nestedArrayDataField.ArrayAccessors[index]).InnerFields.TryGetValue(
                            segment.Name, out dataField1))
                    {
                        throw new DataHolderException("NestedArray definition {0} refered to non-existing field {1}",
                                                      new object[2]
                        {
                            (object)nestedArrayDataField,
                            (object)segment
                        });
                    }
                    LightDBMgr.AddMapping(defs, defaultTables, fieldDef1, mappedFields,
                                          (IFlatDataFieldAccessor)dataField1, dataField1.MappedMember);
                }
            }
        }
Exemple #2
0
        public static void MapNestedArray(this LightDBDefinitionSet defs, IDataField dataField, IDataFieldDefinition fieldDef,
                                          Dictionary <string, List <SimpleDataColumn> > mappedFields)
        {
            var arrField     = (NestedArrayFieldDefinition)fieldDef;
            var arrDataField = (NestedArrayDataField)dataField;

            var defaultTables = defs.EnsureTables(arrField.Table, dataField.DataHolderDefinition);
            var segments      = arrField.Segments;

            for (var i = 0; i < segments.Length; i++)
            {
                var segment = segments[i];
                var cols    = segment.GetColumns(arrDataField.Length);

                for (var j = 0; j < cols.Length; j++)
                {
                    var col         = cols[j];
                    var arrAccessor = (NestedArrayAccessor)arrDataField.ArrayAccessors[j];

                    IDataField fieldAccessor;
                    if (!arrAccessor.InnerFields.TryGetValue(segment.Name, out fieldAccessor))
                    {
                        throw new DataHolderException("NestedArray definition {0} refered to non-existing field {1}", arrDataField,
                                                      segment);
                    }

                    AddMapping(defs, defaultTables, col, mappedFields,
                               (IFlatDataFieldAccessor)fieldAccessor, fieldAccessor.MappedMember);
                }
            }
        }
Exemple #3
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 #4
0
        public static void MapNestedSimple(this LightDBDefinitionSet defs, IDataField dataField, IDataFieldDefinition fieldDef,
                                           Dictionary <string, List <SimpleDataColumn> > mappedFields)
        {
            var nestedFieldDefinition = ((INestedFieldDefinition)fieldDef);

            nestedFieldDefinition.EnsureFieldsNotNull(dataField.DataHolderDefinition.Name);
            defs.AddFieldMappings(nestedFieldDefinition.Fields, ((NestedSimpleDataField)dataField).InnerFields, mappedFields);
        }
Exemple #5
0
        public static void MapFlatSimple(this LightDBDefinitionSet defs, IDataField dataField, IDataFieldDefinition fieldDef,
                                         Dictionary <string, List <SimpleDataColumn> > mappedFields)
        {
            var tableField = ((SimpleFlatFieldDefinition)fieldDef);

            AddMapping(defs, defs.GetDefaultTables(dataField.DataHolderDefinition), tableField, mappedFields,
                       (FlatSimpleDataField)dataField, dataField.MappedMember);
        }
Exemple #6
0
        static void AddMapping(LightDBDefinitionSet defs, TableDefinition[] defaultTables, SimpleFlatFieldDefinition fieldDef,
                               Dictionary <string, List <SimpleDataColumn> > mappedFields, IFlatDataFieldAccessor accessor, MemberInfo member)
        {
            var column = fieldDef.Column;

            var    tables = defs.EnsureTables(fieldDef.Table, defaultTables);
            object defaultValue;

            if (!String.IsNullOrEmpty(fieldDef.DefaultStringValue))
            {
                defaultValue = StringParser.Parse(fieldDef.DefaultStringValue, member.GetVariableType());
            }
            else
            {
                if (String.IsNullOrEmpty(column))
                {
                    return;
                }
                defaultValue = null;
            }

            foreach (var table in tables)
            {
                var dataHolders = defs.m_tableDataHolderMap.GetOrCreate(table);
                if (!dataHolders.Contains(accessor.DataHolderDefinition))
                {
                    dataHolders.Add(accessor.DataHolderDefinition);
                }

                var mappedFieldMap = mappedFields.GetOrCreate(table.Name);

                SimpleDataColumn dataColumn;
                var dbAttrs = member.GetCustomAttributes <DBAttribute>();
                var attr    = dbAttrs.Where(attribute => attribute is PersistentAttribute).FirstOrDefault() as PersistentAttribute;

                if (String.IsNullOrEmpty(column))
                {
                    // use default value
                    mappedFieldMap.Add(dataColumn = new SimpleDataColumn(fieldDef.Name, defaultValue));
                }
                else
                {
                    dataColumn = mappedFieldMap.Find((cmpField) => cmpField.ColumnName == column);
                    if (dataColumn == null)
                    {
                        var type = member.GetActualType();
                        if (attr != null)
                        {
                            type = attr.ReadType ?? type;
                        }
                        var reader = Converters.GetReader(type);
                        mappedFieldMap.Add(dataColumn = new SimpleDataColumn(column, reader));
                    }
                }

                dataColumn.FieldList.Add(accessor);
            }
        }
Exemple #7
0
        public static void MapNestedSimple(this LightDBDefinitionSet defs, IDataField dataField,
                                           IDataFieldDefinition fieldDef, Dictionary <string, List <SimpleDataColumn> > mappedFields)
        {
            INestedFieldDefinition field = (INestedFieldDefinition)fieldDef;

            field.EnsureFieldsNotNull(dataField.DataHolderDefinition.Name);
            defs.AddFieldMappings((IEnumerable <IDataFieldDefinition>)field.Fields,
                                  (IDictionary <string, IDataField>)((NestedDataField)dataField).InnerFields, mappedFields);
        }
Exemple #8
0
        public static void MapFlatArray(this LightDBDefinitionSet defs, IDataField dataField, IDataFieldDefinition fieldDef,
                                        Dictionary <string, List <SimpleDataColumn> > mappedFields)
        {
            var arrFieldDef  = (FlatArrayFieldDefinition)fieldDef;
            var arrDataField = (FlatArrayDataField)dataField;

            var defaultTables = defs.EnsureTables(arrFieldDef.Table, dataField.DataHolderDefinition);
            var cols          = arrFieldDef.GetColumns(arrDataField.Length);
            var accessors     = arrDataField.ArrayAccessors;

            for (var i = 0; i < cols.Length; i++)
            {
                var col = cols[i];
                AddMapping(defs, defaultTables, col, mappedFields, (IFlatDataFieldAccessor)accessors[i], dataField.MappedMember);
            }
        }
Exemple #9
0
        public static void MapFlatArray(this LightDBDefinitionSet defs, IDataField dataField,
                                        IDataFieldDefinition fieldDef, Dictionary <string, List <SimpleDataColumn> > mappedFields)
        {
            FlatArrayFieldDefinition arrayFieldDefinition = (FlatArrayFieldDefinition)fieldDef;
            FlatArrayDataField       flatArrayDataField   = (FlatArrayDataField)dataField;

            TableDefinition[] defaultTables =
                defs.EnsureTables(arrayFieldDefinition.Table, dataField.DataHolderDefinition);
            SimpleFlatFieldDefinition[] columns        = arrayFieldDefinition.GetColumns(flatArrayDataField.Length);
            IDataFieldAccessor[]        arrayAccessors = flatArrayDataField.ArrayAccessors;
            for (int index = 0; index < columns.Length; ++index)
            {
                SimpleFlatFieldDefinition fieldDef1 = columns[index];
                LightDBMgr.AddMapping(defs, defaultTables, fieldDef1, mappedFields,
                                      (IFlatDataFieldAccessor)arrayAccessors[index], dataField.MappedMember);
            }
        }
Exemple #10
0
        private static bool AddTables(ICollection <DataHolderDefinition> allDefs, DataHolderDefinition def,
                                      Dictionary <DataHolderDefinition, List <TableDefinition> > dataHolderToTable,
                                      HashSet <DataHolderDefinition> dataHolders, HashSet <TableDefinition> tables)
        {
            if (!allDefs.Contains(def))
            {
                return(false);
            }
            allDefs.Remove(def);
            dataHolders.Add(def);
            foreach (TableDefinition tableDefinition in dataHolderToTable[def])
            {
                tables.Add(tableDefinition);
                foreach (DataHolderDefinition holderDefinition in tableDefinition.DataHolderDefinitions)
                {
                    dataHolders.Add(holderDefinition);
                    LightDBDefinitionSet.AddTables(allDefs, holderDefinition, dataHolderToTable, dataHolders, tables);
                }
            }

            return(true);
        }
Exemple #11
0
		static void AddMapping(LightDBDefinitionSet defs, TableDefinition[] defaultTables, SimpleFlatFieldDefinition fieldDef,
			Dictionary<string, List<SimpleDataColumn>> mappedFields, IFlatDataFieldAccessor accessor, MemberInfo member)
		{
			var column = fieldDef.Column;

			var tables = defs.EnsureTables(fieldDef.Table, defaultTables);
			object defaultValue;
			if (!String.IsNullOrEmpty(fieldDef.DefaultStringValue))
			{
				defaultValue = StringParser.Parse(fieldDef.DefaultStringValue, member.GetVariableType());
			}
			else
			{
				if (String.IsNullOrEmpty(column))
				{
					return;
				}
				defaultValue = null;
			}

			foreach (var table in tables)
			{
				var dataHolders = defs.m_tableDataHolderMap.GetOrCreate(table);
				if (!dataHolders.Contains(accessor.DataHolderDefinition))
				{
					dataHolders.Add(accessor.DataHolderDefinition);
				}

				var mappedFieldMap = mappedFields.GetOrCreate(table.Name);

				SimpleDataColumn dataColumn;
                var dbAttrs = member.GetCustomAttributes<DBAttribute>();
                var attr = dbAttrs.Where(attribute => attribute is PersistentAttribute).FirstOrDefault() as PersistentAttribute;

				if (String.IsNullOrEmpty(column))
				{
					// use default value
					mappedFieldMap.Add(dataColumn = new SimpleDataColumn(fieldDef.Name, defaultValue));
				}
				else
				{
					dataColumn = mappedFieldMap.Find((cmpField) => cmpField.ColumnName == column);
					if (dataColumn == null)
					{
                        var type = member.GetActualType();
                        if (attr != null)
                            type = attr.ReadType ?? type;
                        var reader = Converters.GetReader(type);
                        mappedFieldMap.Add(dataColumn = new SimpleDataColumn(column, reader));
					}
				}

				dataColumn.FieldList.Add(accessor);
			}
		}
Exemple #12
0
        private static void AddMapping(LightDBDefinitionSet defs, TableDefinition[] defaultTables,
                                       SimpleFlatFieldDefinition fieldDef, Dictionary <string, List <SimpleDataColumn> > mappedFields,
                                       IFlatDataFieldAccessor accessor, MemberInfo member)
        {
            string column = fieldDef.Column;

            TableDefinition[] tableDefinitionArray = defs.EnsureTables(fieldDef.Table, defaultTables);
            object            defaultValue;

            if (!string.IsNullOrEmpty(fieldDef.DefaultStringValue))
            {
                defaultValue = StringParser.Parse(fieldDef.DefaultStringValue, member.GetVariableType());
            }
            else
            {
                if (string.IsNullOrEmpty(column))
                {
                    return;
                }
                defaultValue = (object)null;
            }

            foreach (TableDefinition key in tableDefinitionArray)
            {
                List <DataHolderDefinition> holderDefinitionList =
                    defs.m_tableDataHolderMap.GetOrCreate <TableDefinition, DataHolderDefinition>(key);
                if (!holderDefinitionList.Contains(accessor.DataHolderDefinition))
                {
                    holderDefinitionList.Add(accessor.DataHolderDefinition);
                }
                List <SimpleDataColumn> simpleDataColumnList =
                    mappedFields.GetOrCreate <string, SimpleDataColumn>(key.Name);
                PersistentAttribute persistentAttribute =
                    ((IEnumerable <DBAttribute>)member.GetCustomAttributes <DBAttribute>())
                    .Where <DBAttribute>((Func <DBAttribute, bool>)(attribute => attribute is PersistentAttribute))
                    .FirstOrDefault <DBAttribute>() as PersistentAttribute;
                SimpleDataColumn simpleDataColumn;
                if (string.IsNullOrEmpty(column))
                {
                    simpleDataColumnList.Add(simpleDataColumn = new SimpleDataColumn(fieldDef.Name, defaultValue));
                }
                else
                {
                    simpleDataColumn =
                        simpleDataColumnList.Find(
                            (Predicate <SimpleDataColumn>)(cmpField => cmpField.ColumnName == column));
                    if (simpleDataColumn == null)
                    {
                        Type type1 = member.GetActualType();
                        if (persistentAttribute != null)
                        {
                            Type type2 = persistentAttribute.ReadType;
                            if ((object)type2 == null)
                            {
                                type2 = type1;
                            }
                            type1 = type2;
                        }

                        IFieldReader reader = Converters.GetReader(type1);
                        simpleDataColumnList.Add(simpleDataColumn = new SimpleDataColumn(column, reader));
                    }
                }

                simpleDataColumn.FieldList.Add(accessor);
            }
        }
Exemple #13
0
        public static DataHolderTableMapping[] CreateDataHolderTableMappings(
            Dictionary <TableDefinition, List <DataHolderDefinition> > tableDataHolderMap,
            DataHolderDefinition[] dataHolderDefinitions)
        {
            Dictionary <DataHolderDefinition, List <TableDefinition> > dictionary =
                new Dictionary <DataHolderDefinition, List <TableDefinition> >();

            foreach (KeyValuePair <TableDefinition, List <DataHolderDefinition> > tableDataHolder in tableDataHolderMap)
            {
                if (tableDataHolder.Value == null)
                {
                    LightDBDefinitionSet.log.Warn(
                        "Table-definition \"{0}\" has no used columns (and can possibly be removed from the config).");
                }
                else
                {
                    tableDataHolder.Key.DataHolderDefinitions = tableDataHolder.Value.ToArray();
                    foreach (DataHolderDefinition holderDefinition in tableDataHolder.Key.DataHolderDefinitions)
                    {
                        dictionary.GetOrCreate <DataHolderDefinition, TableDefinition>(holderDefinition)
                        .Add(tableDataHolder.Key);
                    }
                }
            }

            List <DataHolderTableMapping>  holderTableMappingList = new List <DataHolderTableMapping>();
            HashSet <DataHolderDefinition> holderDefinitionSet1   =
                new HashSet <DataHolderDefinition>(
                    (IEnumerable <DataHolderDefinition>)dictionary.Keys.ToArray <DataHolderDefinition>());
            HashSet <DataHolderDefinition> holderDefinitionSet2 = new HashSet <DataHolderDefinition>();
            HashSet <TableDefinition>      tableDefinitionSet   = new HashSet <TableDefinition>();

            foreach (DataHolderDefinition key in dictionary.Keys)
            {
                if (LightDBDefinitionSet.AddTables((ICollection <DataHolderDefinition>)holderDefinitionSet1, key,
                                                   dictionary, holderDefinitionSet2, tableDefinitionSet))
                {
                    DataHolderTableMapping holderTableMapping = new DataHolderTableMapping(
                        holderDefinitionSet2.ToArray <DataHolderDefinition>(),
                        tableDefinitionSet.ToArray <TableDefinition>());
                    holderTableMappingList.Add(holderTableMapping);
                    holderDefinitionSet2.Clear();
                    tableDefinitionSet.Clear();
                }
            }

            foreach (TableDefinition key in tableDataHolderMap.Keys)
            {
                TableDefinition table = key;
                foreach (SimpleDataColumn columnDefinition in table.ColumnDefinitions)
                {
                    if (columnDefinition is IDataFieldBase)
                    {
                        DataHolderDefinition holderDefinition =
                            ((IDataFieldBase)columnDefinition).DataHolderDefinition;
                        if (!holderDefinitionSet2.Contains(holderDefinition))
                        {
                            DataHolderTableMapping holderTableMapping =
                                holderTableMappingList.Find((Predicate <DataHolderTableMapping>)(map =>
                                                                                                 ((IEnumerable <TableDefinition>)map.TableDefinitions).Contains <TableDefinition>(
                                                                                                     table)));
                            DataHolderDefinition[] holderDefinitions = holderTableMapping.DataHolderDefinitions;
                            holderTableMapping.DataHolderDefinitions =
                                new DataHolderDefinition[holderDefinitions.Length + 1];
                            Array.Copy((Array)holderDefinitions, (Array)holderTableMapping.TableDefinitions,
                                       holderDefinitions.Length);
                            holderTableMapping.DataHolderDefinitions[holderDefinitions.Length] = holderDefinition;
                        }
                    }
                }
            }

            return(holderTableMappingList.ToArray());
        }
Exemple #14
0
        private void FinishLoading(Dictionary <string, List <SimpleDataColumn> > fieldMap)
        {
            foreach (KeyValuePair <string, List <SimpleDataColumn> > field1 in fieldMap)
            {
                TableDefinition    table  = this.GetTable(field1.Key);
                SimpleDataColumn[] fields = field1.Value.ToArray();
                if (!string.IsNullOrEmpty(table.MainDataHolderName))
                {
                    DataHolderDefinition dataDef = ((IEnumerable <DataHolderDefinition>) this.DataHolderDefinitions)
                                                   .Where <DataHolderDefinition>((Func <DataHolderDefinition, bool>)(dataHolderDef =>
                                                                                                                     dataHolderDef.Name.Equals(table.MainDataHolderName,
                                                                                                                                               StringComparison.InvariantCultureIgnoreCase))).FirstOrDefault <DataHolderDefinition>();
                    if (dataDef == null)
                    {
                        throw new DataHolderException("Table \"{0}\" refered to invalid MainDataHolder: {1}",
                                                      new object[2]
                        {
                            (object)table,
                            (object)table.MainDataHolderName
                        });
                    }
                    table.SetMainDataHolder(dataDef, false);
                }

                try
                {
                    List <PrimaryColumn> primaryColumnList = new List <PrimaryColumn>();
                    primaryColumnList.AddRange((IEnumerable <PrimaryColumn>)table.PrimaryColumns);
                    for (int index = 0; index < fields.Length; ++index)
                    {
                        SimpleDataColumn field         = fields[index];
                        PrimaryColumn    primaryColumn = primaryColumnList
                                                         .Where <PrimaryColumn>(
                            (Func <PrimaryColumn, bool>)(primCol => primCol.Name == field.ColumnName))
                                                         .FirstOrDefault <PrimaryColumn>();
                        if (primaryColumn != null)
                        {
                            primaryColumn.DataColumn = field;
                            field.IsPrimaryKey       = true;
                            primaryColumnList.Remove(primaryColumn);
                        }

                        if (field.ColumnName == null && field.DefaultValue == null)
                        {
                            LightDBMgr.OnInvalidData(
                                "Field-definition \"{0}\" did not define a Column nor a DefaultValue.", (object)field);
                        }
                    }

                    for (int index1 = 0; index1 < fields.Length; ++index1)
                    {
                        SimpleDataColumn simpleDataColumn1 = fields[index1];
                        for (int index2 = 0; index2 < simpleDataColumn1.FieldList.Count; ++index2)
                        {
                            IFlatDataFieldAccessor field2 = simpleDataColumn1.FieldList[index2];
                            if (field2.DataHolderDefinition.DependingField == field2)
                            {
                                SimpleDataColumn simpleDataColumn2 = fields[0];
                                fields[0]      = simpleDataColumn1;
                                fields[index1] = simpleDataColumn2;
                            }
                        }
                    }

                    if (primaryColumnList.Count > 0 && table.MainDataHolder == null)
                    {
                        throw new DataHolderException(
                                  "Table \"{0}\" referenced PrimaryColumn(s) ({1}) but did not define a MainDataHolder explicitely.",
                                  new object[2]
                        {
                            (object)table,
                            (object)primaryColumnList.ToString <PrimaryColumn>(", ")
                        });
                    }
                    if (primaryColumnList.Count > 0 || table.Variables != null && table.Variables.Length > 0)
                    {
                        int num1             = table.Variables != null ? table.Variables.Length : 0;
                        int destinationIndex = num1 + primaryColumnList.Count;
                        SimpleDataColumn[] simpleDataColumnArray =
                            new SimpleDataColumn[fields.Length + destinationIndex];
                        Array.Copy((Array)fields, 0, (Array)simpleDataColumnArray, destinationIndex, fields.Length);
                        fields = simpleDataColumnArray;
                        if (num1 > 0)
                        {
                            LightDBDefinitionSet.InitVars(table, fields);
                        }
                        int num2 = num1;
                        foreach (PrimaryColumn primaryColumn in primaryColumnList)
                        {
                            DataFieldProxy dataFieldProxy =
                                new DataFieldProxy(primaryColumn.Name, table.MainDataHolder);
                            IFieldReader reader = Converters.GetReader(primaryColumn.TypeName);
                            if (reader == null)
                            {
                                throw new DataHolderException(
                                          "Invalid Type \"" + primaryColumn.TypeName + "\" for PrimaryColumn \"" +
                                          primaryColumn.Name + "\" in definition for Table: " + (object)table +
                                          " - You must explicitely define the TypeName attribute inside the PrimaryColumn node, if it is only an additional table for a DataHolder!",
                                          new object[0]);
                            }
                            SimpleDataColumn simpleDataColumn = new SimpleDataColumn(primaryColumn.Name, reader, 0)
                            {
                                IsPrimaryKey = true
                            };
                            simpleDataColumn.FieldList.Add((IFlatDataFieldAccessor)dataFieldProxy);
                            fields[num2++] = primaryColumn.DataColumn = simpleDataColumn;
                        }
                    }

                    int num = 0;
                    for (int index = 0; index < fields.Length; ++index)
                    {
                        SimpleDataColumn simpleDataColumn = fields[index];
                        if (simpleDataColumn.DefaultValue == null)
                        {
                            simpleDataColumn.m_index = num++;
                        }
                        else
                        {
                            simpleDataColumn.Reader = (IFieldReader)null;
                        }
                    }

                    this.TableDefinitionMap[field1.Key].ColumnDefinitions = fields;
                }
                catch (Exception ex)
                {
                    throw new DataHolderException(ex, "Unable to setup Table \"{0}\" (MainDataHolder: \"{1}\")",
                                                  new object[2]
                    {
                        (object)table,
                        (object)table.MainDataHolder
                    });
                }
            }

            this.m_mappings =
                LightDBDefinitionSet.CreateDataHolderTableMappings(this.m_tableDataHolderMap,
                                                                   this.DataHolderDefinitions);
        }
Exemple #15
0
		static void AddMapping(LightDBDefinitionSet defs, TableDefinition[] defaultTables, SimpleFlatFieldDefinition fieldDef,
			Dictionary<string, List<SimpleDataColumn>> mappedFields, IFlatDataFieldAccessor accessor, MemberInfo member)
		{
			var column = fieldDef.Column;

			var tables = defs.EnsureTables(fieldDef.Table, defaultTables);
			object defaultValue;
			if (!String.IsNullOrEmpty(fieldDef.DefaultStringValue))
			{
				defaultValue = Utility.Parse(fieldDef.DefaultStringValue, member.GetVariableType());
			}
			else
			{
				if (String.IsNullOrEmpty(column))
				{
					return;
				}
				defaultValue = null;
			}

			if (accessor.DataHolderDefinition.Type.Name.EndsWith("TrainerEntry"))
			{
				defs.ToString();
			}

			foreach (var table in tables)
			{
				var dataHolders = defs.m_tableDataHolderMap.GetOrCreate(table);
				if (!dataHolders.Contains(accessor.DataHolderDefinition))
				{
					dataHolders.Add(accessor.DataHolderDefinition);
				}

				var mappedFieldMap = mappedFields.GetOrCreate(table.Name);

				SimpleDataColumn dataColumn;

				if (String.IsNullOrEmpty(column))
				{
					// use default value
					mappedFieldMap.Add(dataColumn = new SimpleDataColumn(fieldDef.Name, defaultValue));
				}
				else
				{
					dataColumn = mappedFieldMap.Find((cmpField) => cmpField.ColumnName == column);
					if (dataColumn == null)
					{
						mappedFieldMap.Add(dataColumn = new SimpleDataColumn(column, Converters.GetReader(member.GetActualType())));
					}
				}

				dataColumn.FieldList.Add(accessor);
			}
		}