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);
        }
Beispiel #2
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();
            }
        }