Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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;
        }