Beispiel #1
0
 public PrimalKey(string relName, ColumnKey attr)
 {
     TableName = relName;
     Attribute = attr;
     Attributes.Add(attr);
 }
Beispiel #2
0
 public Column GetTableAttributeCached(ColumnKey key)
 {
     if (Columns.ContainsKey(key))
         return Columns[key];
     throw new Exception("not found: " + key);
 }
Beispiel #3
0
        private void GetTableConstraintsCached(string tablename, Table currentTable)
        {
            #region referential constraints

            using (
                SqlDataRecordExtended rs2 = _conn.ExecuteDataReader(
                    @"
            SELECT
            con.CONSTRAINT_NAME,
            con.UNIQUE_CONSTRAINT_NAME , --con.*,
            tcon.table_name tcon_table_name,
            pkcon.table_name pkcon_table_name,
            con_col.column_name con_col_column_name,
            pkcon_col.column_name pkcon_col_column_name
            FROM
            INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS con
            JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tcon ON con.CONSTRAINT_NAME = tcon.CONSTRAINT_NAME
            JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS pkcon ON
            con.UNIQUE_CONSTRAINT_NAME = pkcon.CONSTRAINT_NAME
            AND pkcon.CONSTRAINT_TYPE = 'PRIMARY KEY'
            JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE con_col ON con_col.CONSTRAINT_NAME = con.CONSTRAINT_NAME
            JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE pkcon_col ON pkcon_col.CONSTRAINT_NAME = pkcon.CONSTRAINT_NAME

            WHERE tcon.table_name = @id
            ",
                    new {id = tablename}))
            {
                ForeignKeyConstraint currentConstraint = null;

                while (rs2.Read())
                {
                    string constraintName1 = rs2.GetString("CONSTRAINT_NAME");

                    #region if nec. create constraint (class)

                    if (currentConstraint == null || currentConstraint.ConstraintName != constraintName1)
                    {
                        currentConstraint = new ForeignKeyConstraint(constraintName1, currentTable.TableName);
                        ForeignKeys.Add(currentConstraint);
                    }

                    #endregion

                    #region constraint keys

                    var key = new ColumnKey(
                        rs2.GetString("tcon_table_name"),
                        rs2.GetString("con_col_column_name"));

                    var fkey = new ColumnKey(
                        rs2.GetString("pkcon_table_name"),
                        rs2.GetString("pkcon_col_column_name"));

                    currentConstraint.ConstraintKeys.Add(new ForeignKeyColumn(key, fkey));

                    #endregion
                }
            }

            #endregion

            #region primary keys

            using (SqlDataRecordExtended rs2 = _conn.ExecuteDataReader(
                @"
            SELECT
            pkcon.constraint_name,
            pkcon.table_name,
            pkcon_col.column_name
            FROM
            INFORMATION_SCHEMA.TABLE_CONSTRAINTS pkcon
            join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE pkcon_col on pkcon_col.CONSTRAINT_NAME = pkcon.CONSTRAINT_NAME
            /*join INFORMATION_SCHEMA.COLUMNS pkcon_colc on
            pkcon_colc.table_name = pkcon_col.table_name
            and pkcon_colc.COLUMN_NAME = pkcon_col.COLUMN_NAME*/
            WHERE
            --	con.UNIQUE_CONSTRAINT_NAME = pkcon.CONSTRAINT_NAME
            pkcon.CONSTRAINT_TYPE = 'PRIMARY KEY'
            AND pkcon.table_name = @id
            ",
                new {id = tablename}))
            {
                //_conn.ExecuteDataReader("sp_jgljsdklfjsdkljf", new List<object>(){
                //        "param1", 1,
                //        "param2", 2,
                //        "param3", 3});
                PrimaryKeyConstraint currentConstraint = null;

                while (rs2.Read())
                {
                    string conoid = rs2.GetString("CONSTRAINT_NAME");

                    #region if nec. create constraint (class)

                    if (currentConstraint == null || currentConstraint.ConstraintName != conoid)
                    {
                        string constraintName = rs2.GetString("CONSTRAINT_NAME");
                        currentConstraint = new PrimaryKeyConstraint(constraintName, tablename);
                        if (currentTable.PrimaryKey != null) throw new Exception("multiple primary keys??");
                        currentTable.PrimaryKey = currentConstraint;
                    }

                    #endregion

                    #region constraint keys

                    currentConstraint.ConstraintKeys.Add(new ColumnKey(
                                                             rs2.GetString("table_name"),
                                                             rs2.GetString("column_name")));

                    #endregion
                }
            }

            #endregion

            #region unique

            #if (true)
            {
                using (SqlDataRecordExtended rs2 = _conn.ExecuteDataReader(
                    @"
            select con.CONSTRAINT_NAME,con.UNIQUE_CONSTRAINT_NAME , --con.*,
            tcon.table_name tcon_table_name,
            pkcon.table_name pkcon_table_name,
            con_col.column_name con_col_column_name,
            pkcon_col.column_name pkcon_col_column_name
            --con_colc.ORDINAL_POSITION con_colc_ORDINAL_POSITION,
            --pkcon_colc.ORDINAL_POSITION pkcon_colc_ORDINAL_POSITION
            from
            INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS con
            join INFORMATION_SCHEMA.TABLE_CONSTRAINTS tcon on con.CONSTRAINT_NAME = tcon.CONSTRAINT_NAME
            join INFORMATION_SCHEMA.TABLE_CONSTRAINTS pkcon on
            con.UNIQUE_CONSTRAINT_NAME = pkcon.CONSTRAINT_NAME
            and pkcon.CONSTRAINT_TYPE = 'PRIMARY KEY'
            join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE con_col on con_col.CONSTRAINT_NAME = con.CONSTRAINT_NAME
            join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE pkcon_col on pkcon_col.CONSTRAINT_NAME = pkcon.CONSTRAINT_NAME
            /*join INFORMATION_SCHEMA.COLUMNS con_colc on
            con_colc.table_name = con_col.table_name
            and con_colc.COLUMN_NAME = con_col.COLUMN_NAME
            join INFORMATION_SCHEMA.COLUMNS pkcon_colc on
            pkcon_colc.table_name = pkcon_col.table_name
            and pkcon_colc.COLUMN_NAME = pkcon_col.COLUMN_NAME*/
            where tcon.table_name = @id
            ",
                    new {id = tablename}))
                {
                    Model.UniqueConstraint currentConstraint = null;

                    while (rs2.Read())
                    {
                        string conoid = rs2.GetString("CONSTRAINT_NAME");
                        if (currentConstraint == null || currentConstraint.ConstraintName != conoid)
                        {
                            string ConstraintName = rs2.GetString("CONSTRAINT_NAME");

                            currentConstraint = new UniqueConstraint(ConstraintName, tablename);
                            UniqueConstraints.Add(currentConstraint);
                        }

                        currentConstraint.ConstraintKeys.Add(new ColumnKey(rs2.GetString("tcon_table_name"),
                                                                           rs2.GetString("con_col_column_name")));
                    }
                }
            }
            #endif

            #endregion
        }
 private bool TryGetPrimaryKeyConstraint(IDictionary<string,Table> Tables,ColumnKey attr, out PrimaryKeyConstraint primaryKey)
 {
     primaryKey = Tables[attr.TableName].PrimaryKey.ConstraintKeys.Contains(attr)
                      ? Tables[attr.TableName].PrimaryKey
                      : null;
     return primaryKey != null;
 }
        /// <summary>
        /// not safe if the db contains foreign key loops
        /// </summary>
        /// <param name="attr"></param>
        /// <param name="className"></param>
        /// <returns></returns>
        public bool TryGetPrimalKey(IEnumerable<Table> tables, IEnumerable<ForeignKeyConstraint> foreignKeys, Dictionary<ColumnKey, PrimalKey> PrimalKeys, ColumnKey attr, out string className)
        {
            #region first try to get primal key

            if (PrimalKeys.ContainsKey(attr))
            {
                className = PrimalKeys[attr].ClassTypeName;
                return true;
            }

            #endregion

            #region find the table owning the attribute and then try to find a foreign key pair

            foreach (ForeignKeyConstraint f in foreignKeys.Where(fk => fk.TableName == attr.TableName))
            {
                foreach (var ta in f.ConstraintKeys)
                {
                    if (ta.From.TableName == attr.TableName && ta.From.ColumnName == attr.ColumnName)
                    {
                        #region foreign key found

                        var foreignKeyV = new ColumnKey
                            (ta.To.TableName, ta.To.ColumnName);

                        if (PrimalKeys.ContainsKey(foreignKeyV))
                        {
                            className = PrimalKeys[foreignKeyV].ClassTypeName;
                            return true;
                        }
                        // recurse!
                        return TryGetPrimalKey(tables, foreignKeys, PrimalKeys, foreignKeyV, out className);

                        #endregion
                    }
                }
            }

            #endregion

            // primal key not found
            className = null;
            return false;
        }
Beispiel #6
0
 public static extern void double_greater_equal(QueryHandle queryPtr, ColumnKey columnKey, Double value, out NativeException ex);
Beispiel #7
0
 public static extern void float_greater_equal(QueryHandle queryPtr, ColumnKey columnKey, Single value, out NativeException ex);
Beispiel #8
0
 public static extern void long_greater_equal(QueryHandle queryPtr, ColumnKey columnKey, Int64 value, out NativeException ex);