public IList <DbColumn> GetColumns(DbTable table)
        {
            List <DbColumn> result = new List <DbColumn>();
            Dictionary <string, DbColumnArray> columnArrays = new Dictionary <string, DbColumnArray>();

            using (OracleCommand cmd = new OracleCommand(OracleQueries.RetrieveColumns, connection))
            {
                cmd.Parameters.Add(new OracleParameter(":Owner", table.Schema.Name));
                cmd.Parameters.Add(new OracleParameter(":TableName", table.Name));
                OracleDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    string colname = reader.GetString(0);
                    string coltype = reader.GetString(1);
                    if (coltype.Contains("CHAR"))
                    {
                        coltype = String.Format("{0}({1})", coltype, reader.GetValue(2));
                    }
                    else if (reader.GetValue(3) != DBNull.Value)
                    {
                        coltype = String.Format("{0}({1},{2})", coltype, reader.GetValue(3), reader.GetValue(4));
                    }
                    bool mandatory = "N".Equals(reader.GetString(5));

                    if ("TRC_NUM".Equals(colname))
                    {
                        continue;
                    }
                    if ("DAT_CRE".Equals(colname))
                    {
                        continue;
                    }
                    if ("USR_CRE".Equals(colname))
                    {
                        continue;
                    }
                    if ("DAT_MOD".Equals(colname))
                    {
                        continue;
                    }
                    if ("USR_MOD".Equals(colname))
                    {
                        continue;
                    }

                    Match match = ColumnArrayParser.Match(colname);
                    if (match.Success)
                    {
                        DbColumnArray array;
                        string        basename = match.Groups[1].Value;
                        if (!columnArrays.TryGetValue(basename, out array))
                        {
                            array = new DbColumnArray(table, basename, coltype);
                            columnArrays[basename] = array;
                            result.Add(array);
                        }
                        array.ColumnNames.Add(colname);
                    }

                    result.Add(new DbColumn(table, colname, coltype, mandatory));
                }
            }

            return(result);
        }
Example #2
0
 public ColumnArrayElement(TableElement table, DbColumnArray columnArray)
     : base(table, columnArray)
 {
     this.columnArray = columnArray;
     this.columnNames = columnArray.ColumnNames.ToArray();
 }