internal static SqlColumnHeaders[] GetColumns(string tableName) { if (tableName != null) { Debug.Assert(tableName.Length > 0 && tableName.IsLowercase() && tableName.IsTrimmed()); try { List <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.Count]; for (int i = 0; i < columnObjects.Count; 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); }
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(); } }