Пример #1
0
        public TableDefinition[] generate(
            string host,
            string database,
            string tableOwner,
            string user,
            string pwd,
            bool generateAll)
        {
            OL.setConnection(host, database, user, pwd);

            ITransaction trx = OL.Instance.BeginTransaction();

            Criterion crit = new CriterionEqual("table_owner", tableOwner);

            if (!generateAll)
            {
                crit = new CriterionAnd(
                    crit,
                    new CriterionEqual("table_type", "T"));
            }

            List <object> tables = trx.Load(
                typeof(PGTable),
                new CriterionAnd(
                    new CriterionEqual("t.schemaname", "public"),
                    new CriterionText("t.tablename=c.relname")));

            List <TableDefinition> defs = new List <TableDefinition>();

            foreach (PGTable t in tables)
            {
                TableDefinition def = new TableDefinition();
                def.table = map(t);

                /*
                 * List<object> idx = trx.Load(
                 *  typeof(PGIndex),
                 *  new CriterionAnd(
                 *      new CriterionEqual("indrelid", t.oid),
                 *      new CriterionEqual("indisprimary", "t")));
                 */
                def.columns = trx.Load(
                    typeof(PGColumn),
                    new CriterionAnd(
                        new CriterionGreaterThan("attnum", 0),
                        new CriterionEqual("t.oid", t.oid)),
                    "attnum")
                              .ConvertAll <Column>(
                    new Converter <object, Column>(
                        delegate(object o) { return(map((PGColumn)o)); }))
                              .ToArray();

                defs.Add(def);
            }

            trx.Commit();

            return(defs.ToArray());
        }
Пример #2
0
        public TableDefinition[] generate(
            string host,
            string database,
            string tableOwner,
            string user,
            string pwd,
            bool generateAll)
        {
            OL.setConnection(host, database, user, pwd);

            ITransaction trx = OL.Instance.BeginTransaction();

            Criterion crit = new CriterionEqual("table_owner", tableOwner);

            if (!generateAll)
            {
                crit = new CriterionAnd(
                    crit,
                    new CriterionEqual("table_type", "T"));
            }

            List <object> tables = trx.Load(
                typeof(IITable),
                crit);

            List <TableDefinition> defs = new List <TableDefinition>();

            foreach (IITable t in tables)
            {
                TableDefinition def = new TableDefinition();
                def.table = map(t);

                def.columns = trx.Load(
                    typeof(IIColumn),
                    new CriterionEqual("table_name", t.table_name),
                    "column_sequence")
                              .ConvertAll <Column>(
                    new Converter <object, Column>(
                        delegate(object o) { return(map((IIColumn)o)); }))
                              .ToArray();

                defs.Add(def);
            }

            trx.Commit();

            return(defs.ToArray());
        }
Пример #3
0
        protected string CriterionToXPath(Criterion crit)
        {
            if (crit == null)
            {
                throw new ArgumentNullException("crit");
            }

            if (crit is CriterionAnd)
            {
                CriterionAnd and    = (CriterionAnd)crit;
                string       andStr = "";
                andStr += "(";
                foreach (Criterion c in and.crits)
                {
                    andStr += CriterionToXPath(c);
                    andStr += " AND ";
                }
                andStr  = andStr.Substring(0, andStr.Length - 5);
                andStr += ")";
                return(andStr);
            }

            if (crit is CriterionOr)
            {
                CriterionOr or    = (CriterionOr)crit;
                string      orStr = "";
                orStr += "(";
                foreach (Criterion c in or.crits)
                {
                    orStr += CriterionToXPath(c);
                    orStr += " OR ";
                }
                orStr  = orStr.Substring(0, orStr.Length - 4);
                orStr += ")";
                return(orStr);
            }

            if (crit is CriterionEqual)
            {
                CriterionEqual critEq = (CriterionEqual)crit;
                return(critEq.a + eq(critEq.b) + xmlValidString(critEq.b));
            }

            if (crit is CriterionNotEqual)
            {
                CriterionNotEqual eq = (CriterionNotEqual)crit;
                return(eq.a + neq(eq.b) + xmlValidString(eq.b));
            }

            if (crit is CriterionEqualsInsensitive)
            {
                CriterionEqualsInsensitive eq = (CriterionEqualsInsensitive)crit;
                return("UPPER ( " + eq.a + " ) = UPPER ( " + xmlValidString(eq.b) + " ) ");
            }

            if (crit is CriterionGreaterOrEqual)
            {
                CriterionGreaterOrEqual eq = (CriterionGreaterOrEqual)crit;
                return(eq.a + " >= " + xmlValidString(eq.b));
            }

            if (crit is CriterionGreaterThan)
            {
                CriterionGreaterThan eq = (CriterionGreaterThan)crit;
                return(eq.a + " > " + xmlValidString(eq.b));
            }

            if (crit is CriterionLessOrEqual)
            {
                CriterionLessOrEqual eq = (CriterionLessOrEqual)crit;
                return(eq.a + " <= " + xmlValidString(eq.b));
            }

            if (crit is CriterionLessThan)
            {
                CriterionLessThan eq = (CriterionLessThan)crit;
                return(eq.a + " < " + xmlValidString(eq.b));
            }
            if (crit is CriterionLike)
            {
                CriterionLike eq = (CriterionLike)crit;
                return(eq.a + " LIKE " + xmlValidString(eq.b));
            }
            if (crit is CriterionText)
            {
                return(((CriterionText)crit).text);
            }
            if (crit is CriterionIsNull)
            {
                return(((CriterionIsNull)crit).a + " IS NULL");
            }
            throw new Exception("Unknown Criterion!");
        }