Esempio n. 1
0
        /// <summary>
        /// Get a datatable with all tables foreign keys.
        /// </summary>
        /// <param name="p_table">Table name.</param>
        public override System.Data.DataTable QueryTablesForeignKeys(string p_table)
        {
            if (p_table == null)
            {
                System.Data.DataTable v_tables = this.QueryTables(false);

                System.Data.DataTable v_all_fks = new System.Data.DataTable();
                v_all_fks.Columns.Add("table_name");
                v_all_fks.Columns.Add("constraint_name");
                v_all_fks.Columns.Add("r_table_name");
                v_all_fks.Columns.Add("column_name");
                v_all_fks.Columns.Add("r_column_name");
                v_all_fks.Columns.Add("update_rule");
                v_all_fks.Columns.Add("delete_rule");

                foreach (System.Data.DataRow v_tabletemp in v_tables.Rows)
                {
                    System.Data.DataRow v_row;

                    System.Data.DataTable v_fks = new System.Data.DataTable("TableForeignKeys");
                    v_fks.Columns.Add("table_name");
                    v_fks.Columns.Add("constraint_name");
                    v_fks.Columns.Add("r_table_name");
                    v_fks.Columns.Add("column_name");
                    v_fks.Columns.Add("r_column_name");
                    v_fks.Columns.Add("update_rule");
                    v_fks.Columns.Add("delete_rule");

                    com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));

                    com.healthmarketscience.jackcess.Table v_table = v_database.getTable(v_tabletemp["table_name"].ToString().Replace("[", "").Replace("]", ""));

                    java.util.Set v_set = v_database.getTableNames();
                    object[]      v_obj = v_set.toArray();
                    foreach (object v_tablename in v_obj)
                    {
                        com.healthmarketscience.jackcess.Table v_table2 = v_database.getTable((string)v_tablename);

                        try {
                            com.healthmarketscience.jackcess.Index v_index = v_table.getForeignKeyIndex(v_table2);

                            if (!v_index.getName().StartsWith("."))
                            {
                                com.healthmarketscience.jackcess.Index v_index2 = v_index.getReferencedIndex();

                                java.util.List v_list = v_index.getColumns();
                                object[]       v_obj2 = v_list.toArray();

                                java.util.List v_list2 = v_index2.getColumns();
                                object[]       v_obj3  = v_list2.toArray();

                                java.util.List v_list3    = v_database.getRelationships(v_table, v_table2);
                                object[]       v_obj4     = v_list3.toArray();
                                bool           v_dcascade = false;
                                bool           v_ucascade = false;
                                foreach (object o in v_obj4)
                                {
                                    com.healthmarketscience.jackcess.Relationship r = (com.healthmarketscience.jackcess.Relationship)o;

                                    if (r.getName() == v_index.getName())
                                    {
                                        v_dcascade = r.cascadeDeletes();
                                        v_ucascade = r.cascadeUpdates();
                                    }
                                }

                                int k = 0;
                                foreach (object o in v_obj2)
                                {
                                    com.healthmarketscience.jackcess.Index.Column c  = (com.healthmarketscience.jackcess.Index.Column)o;
                                    com.healthmarketscience.jackcess.Index.Column c2 = (com.healthmarketscience.jackcess.Index.Column)v_obj3[k];

                                    v_row = v_fks.NewRow();
                                    v_row["table_name"]      = v_tabletemp["table_name"].ToString();
                                    v_row["constraint_name"] = v_index.getName();
                                    v_row["r_table_name"]    = (string)v_tablename;
                                    v_row["column_name"]     = c.getName();
                                    v_row["r_column_name"]   = c2.getName();
                                    if (v_ucascade)
                                    {
                                        v_row["update_rule"] = "CASCADE";
                                    }
                                    else
                                    {
                                        v_row["update_rule"] = "SET NULL";
                                    }
                                    if (v_dcascade)
                                    {
                                        v_row["delete_rule"] = "CASCADE";
                                    }
                                    else
                                    {
                                        v_row["delete_rule"] = "SET NULL";
                                    }
                                    v_fks.Rows.Add(v_row);

                                    k++;
                                }
                            }
                        }
                        catch (java.lang.IllegalArgumentException) {
                        }
                    }

                    v_all_fks.Merge(v_fks);
                }

                return(v_all_fks);
            }
            else
            {
                System.Data.DataRow v_row;

                System.Data.DataTable v_fks = new System.Data.DataTable("TableForeignKeys");
                v_fks.Columns.Add("table_name");
                v_fks.Columns.Add("constraint_name");
                v_fks.Columns.Add("r_table_name");
                v_fks.Columns.Add("column_name");
                v_fks.Columns.Add("r_column_name");
                v_fks.Columns.Add("update_rule");
                v_fks.Columns.Add("delete_rule");

                com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));

                com.healthmarketscience.jackcess.Table v_table = v_database.getTable(p_table.Replace("[", "").Replace("]", ""));

                java.util.Set v_set = v_database.getTableNames();
                object[]      v_obj = v_set.toArray();
                foreach (object v_tablename in v_obj)
                {
                    com.healthmarketscience.jackcess.Table v_table2 = v_database.getTable((string)v_tablename);

                    try {
                        com.healthmarketscience.jackcess.Index v_index = v_table.getForeignKeyIndex(v_table2);

                        if (!v_index.getName().StartsWith("."))
                        {
                            com.healthmarketscience.jackcess.Index v_index2 = v_index.getReferencedIndex();

                            java.util.List v_list = v_index.getColumns();
                            object[]       v_obj2 = v_list.toArray();

                            java.util.List v_list2 = v_index2.getColumns();
                            object[]       v_obj3  = v_list2.toArray();

                            java.util.List v_list3    = v_database.getRelationships(v_table, v_table2);
                            object[]       v_obj4     = v_list3.toArray();
                            bool           v_dcascade = false;
                            bool           v_ucascade = false;
                            foreach (object o in v_obj4)
                            {
                                com.healthmarketscience.jackcess.Relationship r = (com.healthmarketscience.jackcess.Relationship)o;

                                if (r.getName() == v_index.getName())
                                {
                                    v_dcascade = r.cascadeDeletes();
                                    v_ucascade = r.cascadeUpdates();
                                }
                            }

                            int k = 0;
                            foreach (object o in v_obj2)
                            {
                                com.healthmarketscience.jackcess.Index.Column c  = (com.healthmarketscience.jackcess.Index.Column)o;
                                com.healthmarketscience.jackcess.Index.Column c2 = (com.healthmarketscience.jackcess.Index.Column)v_obj3[k];

                                v_row = v_fks.NewRow();
                                v_row["table_name"]      = p_table;
                                v_row["constraint_name"] = v_index.getName();
                                v_row["r_table_name"]    = (string)v_tablename;
                                v_row["column_name"]     = c.getName();
                                v_row["r_column_name"]   = c2.getName();
                                if (v_ucascade)
                                {
                                    v_row["update_rule"] = "CASCADE";
                                }
                                else
                                {
                                    v_row["update_rule"] = "SET NULL";
                                }
                                if (v_dcascade)
                                {
                                    v_row["delete_rule"] = "CASCADE";
                                }
                                else
                                {
                                    v_row["delete_rule"] = "SET NULL";
                                }
                                v_fks.Rows.Add(v_row);

                                k++;
                            }
                        }
                    }
                    catch (java.lang.IllegalArgumentException) {
                    }
                }

                return(v_fks);
            }
        }