private void FinishLoading(Dictionary <string, List <SimpleDataColumn> > fieldMap) { foreach (KeyValuePair <string, List <SimpleDataColumn> > field1 in fieldMap) { TableDefinition table = GetTable(field1.Key); SimpleDataColumn[] fields = field1.Value.ToArray(); if (!string.IsNullOrEmpty(table.MainDataHolderName)) { DataHolderDefinition dataDef = DataHolderDefinitions .Where(dataHolderDef => dataHolderDef.Name.Equals(table.MainDataHolderName, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); if (dataDef == null) { throw new DataHolderException("Table \"{0}\" refered to invalid MainDataHolder: {1}", (object)table, (object)table.MainDataHolderName); } table.SetMainDataHolder(dataDef, false); } try { List <PrimaryColumn> primaryColumnList = new List <PrimaryColumn>(); primaryColumnList.AddRange(table.PrimaryColumns); for (int index = 0; index < fields.Length; ++index) { SimpleDataColumn field = fields[index]; PrimaryColumn primaryColumn = primaryColumnList .Where( primCol => primCol.Name == field.ColumnName) .FirstOrDefault(); 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.", (object)table, (object)primaryColumnList.ToString(", ")); } 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(fields, 0, simpleDataColumnArray, destinationIndex, fields.Length); fields = simpleDataColumnArray; if (num1 > 0) { 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: " + table + " - You must explicitely define the TypeName attribute inside the PrimaryColumn node, if it is only an additional table for a DataHolder!"); } SimpleDataColumn simpleDataColumn = new SimpleDataColumn(primaryColumn.Name, reader, 0) { IsPrimaryKey = true }; simpleDataColumn.FieldList.Add(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 = null; } } TableDefinitionMap[field1.Key].ColumnDefinitions = fields; } catch (Exception ex) { throw new DataHolderException(ex, "Unable to setup Table \"{0}\" (MainDataHolder: \"{1}\")", (object)table, (object)table.MainDataHolder); } } m_mappings = CreateDataHolderTableMappings(m_tableDataHolderMap, DataHolderDefinitions); }
/// <summary> /// LUA结构支持 /// </summary> /// <returns></returns> public override void GetLuaStruct(StringBuilder code) { base.GetLuaStruct(code); int idx; code.AppendLine($@"['ColumnIndexStart'] ={ColumnIndexStart},"); code.AppendLine($@"['IsUniqueUnion'] ={(IsUniqueUnion.ToString().ToLower())},"); if (PrimaryColumn != null) { code.AppendLine($@"['PrimaryColumn'] = {PrimaryColumn.GetLuaStruct()},"); } if (!string.IsNullOrWhiteSpace(PrimaryField)) { code.AppendLine($@"['PrimaryField'] = '{PrimaryField.ToLuaString()}',"); } else { code.AppendLine($@"['PrimaryField'] = nil,"); } if (!string.IsNullOrWhiteSpace(RedisKey)) { code.AppendLine($@"['RedisKey'] = '{RedisKey.ToLuaString()}',"); } else { code.AppendLine($@"['RedisKey'] = nil,"); } if (!string.IsNullOrWhiteSpace(ModelInclude)) { code.AppendLine($@"['ModelInclude'] = '{ModelInclude.ToLuaString()}',"); } else { code.AppendLine($@"['ModelInclude'] = nil,"); } if (!string.IsNullOrWhiteSpace(ModelBase)) { code.AppendLine($@"['ModelBase'] = '{ModelBase.ToLuaString()}',"); } else { code.AppendLine($@"['ModelBase'] = nil,"); } code.AppendLine($@"['DataVersion'] ={DataVersion},"); code.AppendLine($@"['IsInternal'] ={(IsInternal.ToString().ToLower())},"); if (!string.IsNullOrWhiteSpace(Name)) { code.AppendLine($@"['Name'] = '{Name.ToLuaString()}',"); } else { code.AppendLine($@"['Name'] = nil,"); } code.AppendLine($@"['IsClass'] ={(IsClass.ToString().ToLower())},"); if (!string.IsNullOrWhiteSpace(Interfaces)) { code.AppendLine($@"['Interfaces'] = '{Interfaces.ToLuaString()}',"); } else { code.AppendLine($@"['Interfaces'] = nil,"); } if (!string.IsNullOrWhiteSpace(Project)) { code.AppendLine($@"['Project'] = '{Project.ToLuaString()}',"); } else { code.AppendLine($@"['Project'] = nil,"); } code.AppendLine($@"['MaxIdentity'] ={MaxIdentity},"); idx = 0; code.AppendLine("['Properties'] ={"); foreach (var val in Properties) { if (idx++ > 0) { code.Append(','); } code.AppendLine($@"{val.GetLuaStruct()}"); } code.AppendLine("},"); //idx = 0; //code.AppendLine("['LastProperties'] ={"); //foreach (var val in LastProperties) //{ // if (idx++ > 0) // code.Append(','); // code.AppendLine($@"{val.GetLuaStruct()}"); //} //code.AppendLine("},"); idx = 0; code.AppendLine("['Commands'] ={"); foreach (var val in Commands) { if (idx++ > 0) { code.Append(','); } code.AppendLine($@"{val.GetLuaStruct()}"); } code.AppendLine("},"); idx = 0; code.AppendLine("['Releations'] ={"); foreach (var val in Releations) { if (idx++ > 0) { code.Append(','); } code.AppendLine($@"{val.GetLuaStruct()}"); } code.AppendLine("},"); code.AppendLine($@"['MaxForm'] ={(MaxForm.ToString().ToLower())},"); code.AppendLine($@"['ListDetails'] ={(ListDetails.ToString().ToLower())},"); if (!string.IsNullOrWhiteSpace(ReadTableName)) { code.AppendLine($@"['TableName'] = '{ReadTableName.ToLuaString()}',"); } else { code.AppendLine($@"['TableName'] = nil,"); } if (!string.IsNullOrWhiteSpace(SaveTableName)) { code.AppendLine($@"['SaveTableName'] = '{SaveTableName.ToLuaString()}',"); } else { code.AppendLine($@"['SaveTableName'] = nil,"); } if (!string.IsNullOrWhiteSpace(SaveTable)) { code.AppendLine($@"['SaveTable'] = '{SaveTable.ToLuaString()}',"); } else { code.AppendLine($@"['SaveTable'] = nil,"); } code.AppendLine($@"['DbIndex'] ={DbIndex},"); code.AppendLine($@"['UpdateByModified'] ={(UpdateByModified.ToString().ToLower())},"); if (!string.IsNullOrWhiteSpace(CppName)) { code.AppendLine($@"['CppName'] = '{CppName.ToLuaString()}',"); } else { code.AppendLine($@"['CppName'] = nil,"); } if (!string.IsNullOrWhiteSpace(DisplayName)) { code.AppendLine($@"['DisplayName'] = '{DisplayName.ToLuaString()}',"); } else { code.AppendLine($@"['DisplayName'] = nil,"); } //idx = 0; //code.AppendLine("['PublishProperty'] ={"); //foreach (var val in PublishProperty) //{ // if (idx++ > 0) // code.Append(','); // code.AppendLine($@"{val.GetLuaStruct()}"); //} //code.AppendLine("},"); //idx = 0; //code.AppendLine("['CppProperty'] ={"); //foreach (var val in CppProperty) //{ // if (idx++ > 0) // code.Append(','); // code.AppendLine($@"{val.GetLuaStruct()}"); //} //code.AppendLine("},"); //idx = 0; //code.AppendLine("['ClientProperty'] ={"); //foreach (var val in ClientProperty) //{ // if (idx++ > 0) // code.Append(','); // code.AppendLine($@"{val.GetLuaStruct()}"); //} //code.AppendLine("},"); //idx = 0; //code.AppendLine("['UserProperty'] ={"); //foreach (var val in UserProperty) //{ // if (idx++ > 0) // code.Append(','); // code.AppendLine($@"{val.GetLuaStruct()}"); //} //code.AppendLine("},"); //idx = 0; //code.AppendLine("['PublishDbFields'] ={"); //foreach (var val in PublishDbFields) //{ // if (idx++ > 0) // code.Append(','); // code.AppendLine($@"{val.GetLuaStruct()}"); //} //code.AppendLine("},"); //idx = 0; //code.AppendLine("['DbFields'] ={"); //foreach (var val in DbFields) //{ // if (idx++ > 0) // code.Append(','); // code.AppendLine($@"{val.GetLuaStruct()}"); //} //code.AppendLine("},"); //idx = 0; //code.AppendLine("['ReadCoreCodes'] ={"); //foreach (var val in ReadCoreCodes.Values) //{ // if (idx++ > 0) // code.Append(','); // code.AppendLine($@"{val.GetLuaStruct()}"); //} //code.AppendLine("},"); }
public static List <ColumnBase> ReadSchemaColumn(String tableName) { LogUtils.Logs.Log("Begin reading schema column for table:{0}", tableName); var query = String.Format(@"SELECT C.*,RK.CNST_NAME, RK.PARENT_COL, RK.PARENT, ISPK, ISUK, UKNAME FROM (SELECT COLUMN_NAME ,IS_NULLABLE , DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_PRECISION_RADIX FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME= '{0}') AS C LEFT OUTER JOIN (SELECT DISTINCT OBJECT_NAME(constraint_object_id) CNST_NAME,COL_NAME(parent_object_id, parent_column_id ) AS CHILD_COL, COL_NAME(referenced_object_id, referenced_column_id ) AS PARENT_COL, OBJECT_NAME(referenced_object_id) AS PARENT FROM sys.foreign_key_columns WHERE OBJECT_NAME(parent_object_id) = '{0}') AS RK ON C.COLUMN_NAME = RK.CHILD_COL LEFT OUTER JOIN (SELECT COLUMN_NAME, OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_NAME), 'IsPrimaryKey') ISPK FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='{0}' AND OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_NAME), 'IsPrimaryKey') = 1) AS PK ON C.COLUMN_NAME = PK.COLUMN_NAME LEFT OUTER JOIN (SELECT COLUMN_NAME, CONSTRAINT_NAME AS UKNAME , OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_NAME), 'IsUniqueCnst') ISUK FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='{0}' AND OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_NAME), 'IsUniqueCnst') = 1) AS UK ON C.COLUMN_NAME = UK.COLUMN_NAME", tableName); var table = new DataTable(); Sql.Fill(query, table); var columnList = new List <ColumnBase>(); foreach (DataRow row in table.Rows) { var isPk = FieldUtils.AsInt(row, "ISPK") == 1; var isUk = FieldUtils.AsInt(row, "ISUK") == 1; var isRef = !String.IsNullOrEmpty(FieldUtils.AsText(row, "PARENT_COL")); ColumnBase column = null; if ((isPk || isUk) && !isRef) { column = new PrimaryColumn(); } else if (isRef) { column = new ReferenceColumn(); } else { column = new NormalColumn(); } column.Name = FieldUtils.AsText(row, "COLUMN_NAME"); column.UniqueName = FieldUtils.AsText(row, "UKNAME"); column.DataTypeName = FieldUtils.AsText(row, "DATA_TYPE"); column.MaxLength = FieldUtils.AsInt(row, "CHARACTER_MAXIMUM_LENGTH"); column.NumPrecision = FieldUtils.AsByte(row, "NUMERIC_PRECISION"); column.NumPrecisionRadix = FieldUtils.AsInt16(row, "NUMERIC_PRECISION_RADIX"); column.GenType = GetGenerateType(column.DataTypeName); var setting = default(GenSetting); switch (column.GenType) { case GenerateDataType.String: setting = new GenStringSetting(); break; case GenerateDataType.DateTime: setting = new GenDateTimeSetting(); break; case GenerateDataType.Time: setting = new GenDateTimeSetting(); break; case GenerateDataType.Int: setting = new GenNumSetting(); break; case GenerateDataType.Long: setting = new GenNumSetting(); break; case GenerateDataType.Bit: setting = new GenBitSetting(); break; case GenerateDataType.Uid: setting = new GenSetting(); break; default: setting = new GenSetting(); break; } column.Setting = setting; if (column.ColType.GetType() == typeof(NormalColumn)) { column.CanNull = FieldUtils.AsBool(row, "IS_NULLABLE"); } else { var refCol = column as ReferenceColumn; if (null != refCol) { refCol.CnstName = FieldUtils.AsText(row, "CNST_NAME"); refCol.RefTableName = FieldUtils.AsText(row, "PARENT"); refCol.RefColumnName = FieldUtils.AsText(row, "PARENT_COL"); } } columnList.Add(column); } LogUtils.Logs.Log("End reading schema column, table:{0}, {1} columns", tableName, columnList.Count); return(columnList); }