Example #1
0
        private static IList <DbTable> GetDbTables(string tableName, DbConnection dbConnection, string schema = "public")
        {
            IList <DbTable> list;

            using (DbCommand command = Transaction.CreateCommand(dbConnection, null))
            {
                string str1 = " where tables.table_schema = '" + schema + "'" + (!string.IsNullOrEmpty(tableName) ? " and tables.table_name ILIKE '" + tableName + "' " : string.Empty);
                command.CommandText = @"select tables.table_name, tables.table_schema, columns.column_name, columns.is_nullable, columns.udt_name, columns.column_default, 
key_usage.ordinal_position from information_schema.tables as tables join information_schema.columns as columns
on tables.table_catalog = columns.table_catalog and tables.table_schema = columns.table_schema and 
tables.table_name = columns.table_name left join information_schema.key_column_usage as key_usage on 
tables.table_catalog = key_usage.table_catalog and tables.table_schema = key_usage.table_schema and 
tables.table_name = key_usage.table_name and columns.column_name = key_usage.column_name "
                                      + str1 + "order by table_schema, table_name, columns.ordinal_position";
                command.Connection = dbConnection;
                DbDataReader dbDataReader = command.ExecuteReader();
                list = (IList <DbTable>) new List <DbTable>();
                Dictionary <string, DbTable>  dictionary1 = new Dictionary <string, DbTable>();
                Dictionary <string, DbColumn> dictionary2 = new Dictionary <string, DbColumn>();
                while (dbDataReader.Read())
                {
                    string  string1      = dbDataReader.GetString(0);
                    string  string2      = dbDataReader.GetString(1);
                    string  string3      = dbDataReader.GetString(2);
                    string  string4      = dbDataReader.GetString(3);
                    string  string5      = dbDataReader.GetString(4);
                    string  str2         = !dbDataReader.IsDBNull(5) ? dbDataReader.GetString(5) : string.Empty;
                    bool    isPrimaryKey = !dbDataReader.IsDBNull(6);
                    DbTable dbTable      = null;
                    if (!dictionary1.ContainsKey(string1))
                    {
                        dbTable = new DbTable(string1, string2, (IList <DbColumn>) new List <DbColumn>());
                        dictionary1.Add(string1, dbTable);
                        list.Add(dbTable);
                    }
                    else
                    {
                        dbTable = dictionary1[string1];
                    }
                    string key = string1 + "*" + string3;
                    if (!dictionary2.ContainsKey(key))
                    {
                        bool             pIsAutoGenerated = str2.StartsWith("nextval");
                        IList <DbColumn> columns          = dictionary1[string1].Columns;
                        DbColumn         dbColumn         = new DbColumn(string3, PostgresSchemaProvider.GetDataType(string5), string4 == "YES", isPrimaryKey, pIsAutoGenerated, false);
                        dbColumn.ColumnTypeName = DbColumnFactory.GetColumnTypeName(dbColumn.DbType, dbTable.Name, dbColumn.IsPrimaryKey, dbColumn.Nullable);
                        dbColumn.ReturnType     = DbColumnFactory.GetReturnType(dbColumn.DbType, dbColumn.Nullable);
                        columns.Add(dbColumn);
                        dictionary2.Add(key, dbColumn);
                    }
                    else if (isPrimaryKey)
                    {
                        dictionary2[key].IsPrimaryKey = true;
                    }
                }
            }
            dbConnection.Close();
            return(list);
        }
Example #2
0
        private IList <DbTable> GetDbTables(string tableName, DbConnection dbConnection)
        {
            Dictionary <string, DbTable> mapDbTables = new Dictionary <string, DbTable>();
            IList <DbTable> dbTables = (IList <DbTable>) new List <DbTable>();

            using (DbCommand command = Transaction.CreateCommand(dbConnection, (Transaction)null))
            {
                string str1 = !string.IsNullOrEmpty(tableName) ? "WHERE tables.TABLE_NAME = '" + tableName + "' " : string.Empty;
                command.CommandText = @"SELECT tables.TABLE_NAME, tables.TABLE_SCHEMA, columns.COLUMN_NAME, IS_NULLABLE,DATA_TYPE, 
COLUMN_DEFAULT, tc.CONSTRAINT_TYPE , columnproperty(object_id(quotename(columns.TABLE_SCHEMA) + '.' + quotename(columns.TABLE_NAME)),
columns.COLUMN_NAME, 'IsIdentity') FROM INFORMATION_SCHEMA.TABLES AS tables
JOIN INFORMATION_SCHEMA.COLUMNS AS columns ON tables.TABLE_CATALOG = columns.TABLE_CATALOG AND
tables.TABLE_SCHEMA = columns.TABLE_SCHEMA AND tables.TABLE_NAME = columns.TABLE_NAME
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE cu ON cu.Table_Name = columns.Table_Name
AND cu.Column_Name = columns.COLUMN_NAME LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON cu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
AND CONSTRAINT_TYPE = 'PRIMARY KEY' " + str1 + "ORDER BY tables.TABLE_SCHEMA, tables.TABLE_NAME, columns.ORDINAL_POSITION";

                command.Connection = dbConnection;
                Dictionary <string, DbColumn> dictionary2 = new Dictionary <string, DbColumn>();
                using (DbDataReader dbDataReader = command.ExecuteReader())
                {
                    while (dbDataReader.Read())
                    {
                        string  schemaTableName  = dbDataReader.GetString(0);
                        string  schemaName       = dbDataReader.GetString(1);
                        string  string3          = dbDataReader.GetString(2);
                        string  string4          = dbDataReader.GetString(3);
                        string  string5          = dbDataReader.GetString(4);
                        string  str2             = !dbDataReader.IsDBNull(5) ? dbDataReader.GetString(5) : string.Empty;
                        bool    isPrimaryKey     = !dbDataReader.IsDBNull(6) && !string.IsNullOrEmpty(dbDataReader.GetString(6));
                        bool    pIsAutoGenerated = dbDataReader.GetInt32(7) == 1;
                        DbTable dbTable          = null;
                        if (!mapDbTables.ContainsKey(schemaTableName))
                        {
                            dbTable = new DbTable(schemaTableName, schemaName, (IList <DbColumn>) new List <DbColumn>());
                            mapDbTables.Add(schemaTableName, dbTable);
                            dbTables.Add(dbTable);
                        }
                        else
                        {
                            dbTable = mapDbTables[schemaTableName];
                        }
                        IList <DbColumn> columns = mapDbTables[schemaTableName].Columns;
                        string           key     = schemaTableName + schemaName + string3;
                        if (!dictionary2.ContainsKey(key))
                        {
                            DbColumn dbColumn = new DbColumn(string3, MssqlSchemaProvider.GetDataType(string5),
                                                             string4 == "YES", isPrimaryKey, pIsAutoGenerated, false);
                            dbColumn.ColumnTypeName = DbColumnFactory.GetColumnTypeName(dbColumn.DbType, dbTable.Name, dbColumn.IsPrimaryKey, dbColumn.Nullable);
                            dbColumn.ReturnType     = DbColumnFactory.GetReturnType(dbColumn.DbType, dbColumn.Nullable);
                            columns.Add(dbColumn);
                            dictionary2.Add(key, dbColumn);
                        }
                        else
                        {
                            DbColumn dbColumn = dictionary2[key];
                            if (isPrimaryKey)
                            {
                                dbColumn.IsPrimaryKey = isPrimaryKey;
                            }
                            if (pIsAutoGenerated)
                            {
                                dbColumn.IsAutoGenerated = pIsAutoGenerated;
                            }
                        }
                    }
                }
            }
            LoadForeignKeys(tableName, ref dbTables, dbConnection);
            using (DbCommand command = Transaction.CreateCommand(dbConnection, (Transaction)null))
            {
                command.CommandText = "SELECT VIEWS.TABLE_NAME, VIEWS.TABLE_SCHEMA, VIEW_COLUMN_USAGE.COLUMN_NAME, IS_NULLABLE,DATA_TYPE FROM INFORMATION_SCHEMA.VIEWS AS VIEWS JOIN INFORMATION_SCHEMA.VIEW_COLUMN_USAGE AS VIEW_COLUMN_USAGE ON VIEWS.TABLE_CATALOG = VIEW_COLUMN_USAGE.VIEW_CATALOG AND VIEWS.TABLE_SCHEMA = VIEW_COLUMN_USAGE.VIEW_SCHEMA AND VIEWS.TABLE_NAME = VIEW_COLUMN_USAGE.VIEW_NAME JOIN INFORMATION_SCHEMA.COLUMNS AS COLUMNS ON VIEW_COLUMN_USAGE.TABLE_CATALOG = COLUMNS.TABLE_CATALOG AND VIEW_COLUMN_USAGE.TABLE_SCHEMA = COLUMNS.TABLE_SCHEMA AND VIEW_COLUMN_USAGE.TABLE_NAME = COLUMNS.TABLE_NAME AND VIEW_COLUMN_USAGE.COLUMN_NAME = COLUMNS.COLUMN_NAME " + (!string.IsNullOrEmpty(tableName) ? "WHERE VIEWS.TABLE_NAME = '" + tableName + "' " : string.Empty);
                command.Connection  = dbConnection;
                using (DbDataReader dbDataReader = command.ExecuteReader())
                {
                    mapDbTables.Clear();
                    while (dbDataReader.Read())
                    {
                        string string1 = dbDataReader.GetString(0);
                        string string2 = dbDataReader.GetString(1);
                        string string3 = dbDataReader.GetString(2);
                        string string4 = dbDataReader.GetString(3);
                        string string5 = dbDataReader.GetString(4);
                        if (!mapDbTables.ContainsKey(string1))
                        {
                            DbTable dbTable = new DbTable(string1, string2, (IList <DbColumn>) new List <DbColumn>());
                            mapDbTables.Add(string1, dbTable);
                            dbTables.Add(dbTable);
                        }
                        mapDbTables[string1].Columns.Add(new DbColumn(string3, MssqlSchemaProvider.GetDataType(string5), string4 == "YES", false, false, true));
                    }
                }
            }
            dbConnection.Close();
            return(dbTables);
        }
Example #3
0
        public static string GenerateStoredProcedureCode(StoredProcedure pProc, string columnPrefix, bool pIncludeSchema)
        {
            string        newLine       = Environment.NewLine;
            string        str           = "\t";
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("using System;").Append(newLine);
            stringBuilder.Append("using System.Data;");
            stringBuilder.Append("using System.Data.SqlClient;");
            stringBuilder.Append("namespace Tables.").Append(pProc.Name).Append(" {").Append(newLine);
            stringBuilder.Append(newLine);
            stringBuilder.Append(str).Append("public sealed class Proc : ").Append(typeof(StoredProcBase).ToString()).Append(" {").Append(newLine);
            stringBuilder.Append(newLine);
            stringBuilder.Append(str).Append(str).Append("public static readonly Proc Instance = new Proc();").Append(newLine);
            stringBuilder.Append(newLine);
            stringBuilder.Append(str).Append(str).Append("public Proc() : base(DATABASE, \"").Append(!pIncludeSchema || string.IsNullOrEmpty(pProc.Schema) ? string.Empty : pProc.Schema + ".").Append(pProc.Name).Append("\", typeof(Row)) {").Append(newLine);
            stringBuilder.Append(newLine);
            stringBuilder.Append(str).Append(str).Append(str).Append("//AddColumns(");
            stringBuilder.Append(");").Append(newLine);
            stringBuilder.Append(str).Append(str).Append("}").Append(newLine);
            stringBuilder.Append(newLine);
            stringBuilder.Append(str).Append(str).Append("public Sql.IResult Execute(");
            int index1 = 0;

            while (index1 < pProc.Parameters.Count)
            {
                SpParameter spParameter = pProc.Parameters[index1];
                if (index1 > 0)
                {
                    stringBuilder.Append(", ");
                }
                if (spParameter.Direction == ParameterDirection.Output || spParameter.Direction == ParameterDirection.ReturnValue)
                {
                    stringBuilder.Append("out ");
                }
                stringBuilder.Append(DbColumnFactory.GetReturnType(spParameter.ParamType, false)).Append(" ").Append(spParameter.Name);
                checked { ++index1; }
            }
            if (pProc.Parameters.Count > 0)
            {
                stringBuilder.Append(", ");
            }
            stringBuilder.Append("Sql.Transaction transaction){").Append(newLine).Append(newLine);
            int index2 = 0;

            while (index2 < pProc.Parameters.Count)
            {
                SpParameter spParameter = pProc.Parameters[index2];
                stringBuilder.Append(str).Append(str).Append(str).Append("SqlParameter p").Append(index2.ToString()).Append(" = new SqlParameter(\"").Append(spParameter.Name).Append("\", SqlDbType.").Append(DbColumnFactory.GetSqlType(spParameter.ParamType).ToString()).Append(");").Append(newLine);
                stringBuilder.Append(str).Append(str).Append(str).Append("p").Append(index2.ToString()).Append(".Direction = ParameterDirection.").Append(spParameter.Direction.ToString()).Append(";").Append(newLine);
                if (spParameter.Direction == ParameterDirection.Input || spParameter.Direction == ParameterDirection.InputOutput)
                {
                    stringBuilder.Append(str).Append(str).Append(str).Append("p").Append(index2.ToString()).Append(".Value = ").Append(spParameter.Name).Append(";").Append(newLine);
                }
                stringBuilder.Append(newLine);
                checked { ++index2; }
            }
            stringBuilder.Append(str).Append(str).Append(str).Append("Sql.IResult result = ExecuteProcedure(transaction");
            int num = 0;

            while (num < pProc.Parameters.Count)
            {
                stringBuilder.Append(", p").Append(num.ToString());
                checked { ++num; }
            }
            stringBuilder.Append(");").Append(newLine).Append(newLine);
            int index3 = 0;

            while (index3 < pProc.Parameters.Count)
            {
                SpParameter spParameter = pProc.Parameters[index3];
                if (spParameter.Direction == ParameterDirection.InputOutput || spParameter.Direction == ParameterDirection.Output || spParameter.Direction == ParameterDirection.ReturnValue)
                {
                    stringBuilder.Append(str).Append(str).Append(str).Append(spParameter.Name).Append(" = (").Append(DbColumnFactory.GetReturnType(spParameter.ParamType, false)).Append(")").Append("p").Append(index3.ToString()).Append(".Value;").Append(newLine);
                }
                checked { ++index3; }
            }
            stringBuilder.Append(str).Append(str).Append(str).Append("return result;").Append(newLine);
            stringBuilder.Append(str).Append(str).Append("}").Append(newLine).Append(newLine);
            stringBuilder.Append(str).Append(str).Append("public Row this[int pIndex, Sql.IResult pResult]{").Append(newLine);
            stringBuilder.Append(str).Append(str).Append(str).Append("get { return (Row)pResult.GetRow(this, pIndex); }").Append(newLine);
            stringBuilder.Append(str).Append(str).Append("}").Append(newLine);
            stringBuilder.Append(str).Append("}").Append(newLine);
            stringBuilder.Append(newLine);
            stringBuilder.Append(str).Append("public sealed class Row : ").Append(typeof(Record).ToString()).Append(" {").Append(newLine);
            stringBuilder.Append(newLine);
            stringBuilder.Append(str).Append(str).Append("private new Proc Tbl {").Append(newLine);
            stringBuilder.Append(str).Append(str).Append(str).Append("get { return (Proc)base.Tbl; }").Append(newLine);
            stringBuilder.Append(str).Append(str).Append("}").Append(newLine);
            stringBuilder.Append(newLine);
            stringBuilder.Append(str).Append(str).Append("public Row() : base(Proc.Instance) {").Append(newLine);
            stringBuilder.Append(str).Append(str).Append("}").Append(newLine);
            stringBuilder.Append(str).Append("}").Append(newLine);
            stringBuilder.Append("}");
            return(stringBuilder.ToString());
        }