예제 #1
0
 public DBColumnInfo(DBRelationInfo relation, string name, string typeName, string typeLength)
 {
     this.Relation   = relation;
     this.Name       = name;
     this.TypeName   = typeName;
     this.TypeLength = typeLength;
 }
예제 #2
0
        private static DBColumnInfo ColInfoFromName(dbOrigen source, string qualifiedName)
        {
            string[] names        = qualifiedName.Split(new char[] { '.' });
            string   schemaName   = string.Empty;
            string   relationName = string.Empty;
            string   columnName   = string.Empty;

            switch (source)
            {
            case dbOrigen.PGSQL:
                //En PostgreSQL el esquema por defecto es 'public'
                schemaName = (names.Length > 2) ? names[0] : "public";
                break;

            case dbOrigen.ORA:
                //En ORACLE el nombre debe ser completamente calificado
                //puesto que no existe el concepto de ESQUEMA como categoría.
                //En ORACLE ESQUEMA = NOMBRE_PROPIETARIO. Por tanto, si no
                //conocemos el nombre del propietario, la estructura DBColumnInfo
                //quedará incompleta.
                schemaName = (names.Length > 2) ? names[0] : string.Empty;
                break;
            }
            relationName = (names.Length > 2) ? names[1] : names[0];
            columnName   = (names.Length > 2) ? names[2] : names[1];
            DBSchemaInfo   schema   = new DBSchemaInfo(source, schemaName);
            DBRelationInfo relation = new DBRelationInfo(schema, relationName, dbRelationType.Unknown);

            return(new DBColumnInfo(relation, columnName, string.Empty, string.Empty));
        }
예제 #3
0
        private static bool SchemaObjectExists(DBRelationInfo target)
        {
            bool e = false;
            Collection <Collection <DBRelationInfo> > candidates = new Collection <Collection <DBRelationInfo> >();

            switch (target.Type)
            {
            case dbRelationType.Table:
                candidates.Add(QueryTableCatalog(target.Schema));
                break;

            case dbRelationType.View:
                candidates.Add(QueryViewCatalog(target.Schema));
                break;

            case dbRelationType.Unknown:
                candidates.Add(QueryTableCatalog(target.Schema));
                candidates.Add(QueryViewCatalog(target.Schema));
                break;
            }
            foreach (Collection <DBRelationInfo> list in candidates)
            {
                foreach (DBRelationInfo r in list)
                {
                    if (r.Name.Trim().ToUpper() == target.Name.Trim().ToUpper())
                    {
                        e = true;
                        break;
                    }
                }
                if (e)
                {
                    break;
                }
            }
            return(e);
        }
예제 #4
0
        public static Collection <DBColumnInfo> QueryColumnCatalog(DBRelationInfo relation)
        {
            string SQL = null;

            object[] aParams = null;
            switch (relation.Schema.Source)
            {
            case dbOrigen.ORA:
                SQL = AdministradorPreferencias.Read(PrefsBD.ORACustomColumnSchemaQuery);
                if (SQL == null || SQL.Trim() == string.Empty)
                {
                    SQL = AdministradorPreferencias.Read(PrefsBD.ORADefaultColumnSchemaQuery);
                }
                aParams = new object[] { relation.Schema.Name.Trim(), relation.Name.Trim() };
                break;

            case dbOrigen.PGSQL:
                SQL = AdministradorPreferencias.Read(PrefsBD.PGSQLCustomColumnSchemaQuery);
                if (SQL == null || SQL.Trim() == string.Empty)
                {
                    SQL = AdministradorPreferencias.Read(PrefsBD.PGSQLDefaultColumnSchemaQuery);
                }
                aParams = new object[] { DBSettings.PGSQLDb, relation.Schema.Name.Trim(), relation.Name.Trim() };
                break;
            }

            DataSet ds = GetDataSet(relation.Schema.Source, SQL, aParams);
            Collection <DBColumnInfo> columns = new Collection <DBColumnInfo>();

            foreach (DataRow r in ds.Tables[0].Rows)
            {
                string length = (r[2] == System.DBNull.Value) ? string.Empty : r[2].ToString();
                columns.Add(new DBColumnInfo(relation, (string)r[0], (string)r[1], length));
            }
            return(columns);
        }