Beispiel #1
0
        private void InitPublicTables(IEnumerable<ITableFilter> tableFilters,
                                      IEnumerable<ITableFilter> columnsToGenerate)
        {
            {
                var sqlBuffer = new List<string>();
                var bindBuffer = new List<object>();

                foreach (ITableFilter filter in tableFilters) filter.InitSQL("t", sqlBuffer, bindBuffer);

                using (
                    SqlDataRecordExtended rs =
                        _conn.ExecuteDataReader(
                            @"
            select table_name from INFORMATION_SCHEMA.TABLES t where
            t.TABLE_TYPE = 'BASE TABLE'
            " +
                            StringUtil.Agg(" AND ",
                                           sqlBuffer.ToArray()),
                            bindBuffer.ToArray())
                    )
                {
                    while (rs.Read())
                    {
                        string tableName = rs.GetString("table_name");
                        var currentTable = new Table(tableName);
                        Tables.Add(currentTable.TableName, currentTable);
                    }
                }
            }
            {
                var sqlBuffer = new List<string>();
                var bindBuffer = new List<object>();

                foreach (ITableFilter filter in tableFilters) filter.InitSQL("t", sqlBuffer, bindBuffer);
                foreach (ITableFilter filter in columnsToGenerate) filter.InitSQL("c", sqlBuffer, bindBuffer);

                using (
                    SqlDataRecordExtended rs2 =
                        _conn.ExecuteDataReader(
                            @"
              select c.TABLE_NAME , c.COLUMN_NAME , c.DATA_TYPE,
             c.CHARACTER_MAXIMUM_LENGTH as Size, c.IS_NULLABLE as IsNullable,
             c.COLUMN_DEFAULT as DefaultValue,
             c.ordinal_position ,
            t.TABLE_TYPE as TableType
            from INFORMATION_SCHEMA.COLUMNS c
            inner join INFORMATION_SCHEMA.TABLES t on c.TABLE_NAME = t.TABLE_NAME
            where
            t.TABLE_TYPE = 'BASE TABLE'
            " +
                            StringUtil.Agg(" AND ",
                                           sqlBuffer.ToArray()),
                            bindBuffer.ToArray())
                    )
                {
                    while (rs2.Read())
                    {
                        var attr = new Column(
                            rs2.GetString("COLUMN_NAME"),
                            rs2.GetString("DATA_TYPE"),
                            (short) rs2.GetInt32("ordinal_position"),
                            rs2.GetString("TABLE_NAME"),
                            !GetBoolean(rs2.GetString("IsNullable")));
                        Columns.Add(attr.GetKey(), attr);
                    }
                }
            }
            foreach (var curr in Tables)
            {
                GetPublicTableAttributesCached(curr.Value.TableName,
                                               curr.Value.Columns);

                GetTableConstraintsCached(curr.Value.TableName, curr.Value);
            }
            // namespace
        }