public SqlTable(string tableName) { if(tableName != null && tableName.Trim().Length > 0) { this.tableName = tableName; SqlColumnHeaders[] columns = SqlController.GetColumns(tableName); if(columns != null && columns.Length > 0) { uint primaryKeyCount = 0; foreach(SqlColumnHeaders column in columns) { if(column.isPrimaryKey) { primaryKeyCount++; } else { break; } } if(primaryKeyCount > 0) { primaryKeyHeaders = new SqlColumnHeaders[primaryKeyCount]; } else { primaryKeyHeaders = null; } long additionalKeyCount = columns.Length - primaryKeyCount; if(additionalKeyCount > 0) { additionalKeyHeaders = new SqlColumnHeaders[additionalKeyCount]; } else { additionalKeyHeaders = null; } for(int i = 0; i < columns.Length; i++) { if(i < primaryKeyCount) { Debug.Assert(columns[i].isPrimaryKey); primaryKeyHeaders[i] = columns[i]; } else { Debug.Assert(!columns[i].isPrimaryKey); additionalKeyHeaders[i - primaryKeyCount] = columns[i]; } } } else { throw new ArgumentNullException(); } } else { throw new ArgumentNullException(); } }
internal static SqlColumnHeaders[] GetColumns(string tableName) { if(tableName != null) { Debug.Assert(tableName.Length > 0 && tableName.IsLowercase() && tableName.IsTrimmed()); try { object[][] columnObjects = Select("information_schema.columns", null, "column_name, is_nullable='YES', character_maximum_length, column_type, column_key='PRI', column_key='UNI', extra='auto_increment'", "table_name=?a", new string[] { tableName }, "ordinal_position", 0 ); if(columnObjects != null) { SqlColumnHeaders[] columns = new SqlColumnHeaders[columnObjects.Length]; for(int i = 0; i < columnObjects.Length; i++) { columns[i] = SqlColumnHeaders.FromSql((string)columnObjects[i][0], (long)columnObjects[i][1] > 0, columnObjects[i][2].GetType().Equals(typeof(DBNull)) ? 0 : (ulong)columnObjects[i][2], (string)columnObjects[i][3], (long)columnObjects[i][4] > 0, (long)columnObjects[i][5] > 0, (long)columnObjects[i][6] > 0); } return columns; } } catch(Exception e) { Log.exception(e); } } Debug.Fail(); return null; }