Example #1
0
        public static Connection GetConnection()
        {
            Connection connection = Org.Mockito.Mockito.Mock <DriverForTest.FakeConnection>();

            try
            {
                Statement statement = Org.Mockito.Mockito.Mock <Statement>();
                ResultSet results   = Org.Mockito.Mockito.Mock <ResultSet>();
                Org.Mockito.Mockito.When(results.GetLong(1)).ThenReturn(15L);
                Org.Mockito.Mockito.When(statement.ExecuteQuery(Matchers.Any <string>())).ThenReturn
                    (results);
                Org.Mockito.Mockito.When(connection.CreateStatement()).ThenReturn(statement);
                DatabaseMetaData metadata = Org.Mockito.Mockito.Mock <DatabaseMetaData>();
                Org.Mockito.Mockito.When(metadata.GetDatabaseProductName()).ThenReturn("Test");
                Org.Mockito.Mockito.When(connection.GetMetaData()).ThenReturn(metadata);
                PreparedStatement reparedStatement0 = Org.Mockito.Mockito.Mock <PreparedStatement>
                                                          ();
                Org.Mockito.Mockito.When(connection.PrepareStatement(AnyString())).ThenReturn(reparedStatement0
                                                                                              );
                PreparedStatement preparedStatement = Org.Mockito.Mockito.Mock <PreparedStatement>
                                                          ();
                ResultSet resultSet = Org.Mockito.Mockito.Mock <ResultSet>();
                Org.Mockito.Mockito.When(resultSet.Next()).ThenReturn(false);
                Org.Mockito.Mockito.When(preparedStatement.ExecuteQuery()).ThenReturn(resultSet);
                Org.Mockito.Mockito.When(connection.PrepareStatement(AnyString(), AnyInt(), AnyInt
                                                                         ())).ThenReturn(preparedStatement);
            }
            catch (SQLException)
            {
            }
            return(connection);
        }
        /**
         * Returns JdbcResultResource of available databases
         */
        protected JdbcResultResource getCatalogs(Env env)
        {
            clearErrors();

            try {
                if (_dmd == null)
                {
                    _dmd = _conn.getConnection().getMetaData();
                }

                ResultSet rs = _dmd.getCatalogs();

                if (rs != null)
                {
                    return(createResult(_savedStmt, rs));
                }
                else
                {
                    return(null);
                }
            }
            catch (SQLException e) {
                saveErrors(e);
                log.log(Level.FINEST, e.ToString(), e);
                return(null);
            }
        }
Example #3
0
        public JdbcTableMetaData(Env env,
                                 string catalog,
                                 string schema,
                                 string name,
                                 DatabaseMetaData md)

        {
            _catalog      = catalog;
            _schema       = schema;
            _name         = name;
            _lastModified = env.getCurrentTime();

            ResultSet rs = md.getColumns(_catalog, _schema, _name, null);

            try {
                while (rs.next())
                {
                    // COLUMN_NAME
                    string columnName = rs.getString(4);

                    JdbcColumnMetaData column = new JdbcColumnMetaData(this, rs);

                    _columnMap.put(columnName, column);
                }

                rs.close();

                try {
                    rs = md.getPrimaryKeys(_catalog, _schema, _name);
                    while (rs.next())
                    {
                        // COLUMN_NAME
                        string columnName = rs.getString(4);

                        JdbcColumnMetaData column = _columnMap.get(columnName);

                        column.setPrimaryKey(true);
                    }
                } catch (SQLException e) {
                    log.log(Level.FINE, e.ToString(), e);
                } finally {
                    rs.close();
                }

                rs = md.getIndexInfo(_catalog, _schema, _name, false, true);
                while (rs.next())
                {
                    // COLUMN_NAME
                    string columnName = rs.getString(9);

                    JdbcColumnMetaData column = _columnMap.get(columnName);

                    column.setIndex(true);
                }
            } catch (Exception e) {
                log.log(Level.FINE, e.ToString(), e);
            } finally {
                rs.close();
            }
        }
Example #4
0
        private void AddTableTypes(TreeNode typesNode)
        {
            var schemas = Database.Dmvs.Schemas.ToDictionary(x => x.schema_id);

            var types = Database.Dmvs.TableTypes.Where(x => x.IsTableType && x.IsUserDefined)
                        .Select(x => new { t = x, Name = schemas[x.SchemaID].name + "." + x.Name })
                        .OrderBy(t => t.Name).ToArray();

            if (types.Length == 0)
            {
                return;
            }

            var tableNode = typesNode.Nodes.Add("User-Defined Table Types");

            foreach (var type in types)
            {
                var typeNode = tableNode.Nodes.Add(type.Name);
                //typeNode.ContextMenu = tableTypeMenu;
                // Add columns
                var typeColumnsNode = typeNode.Nodes.Add("Columns");
                var columns         = Database.Dmvs.Columns
                                      .Where(c => c.ObjectID == type.t.TypeTableObjectId)
                                      .ToArray();

                foreach (var c in columns)
                {
                    var mainColumn = Database.Dmvs.Columns.Single(x => x.ColumnID == c.ColumnID && x.ObjectID == c.ObjectID);

                    var typeName = DatabaseMetaData.GetColumnTypeName(Database.Dmvs, mainColumn);

                    typeColumnsNode.Nodes.Add($"{c.Name} ({typeName})");
                }

                // Add indexes
                var tableIndexesNode = typeNode.Nodes.Add("Indexes");
                var indexes          = Database.Dmvs.Indexes
                                       .Where(i => i.ObjectID == type.t.TypeTableObjectId && i.IndexID > 0)
                                       .OrderBy(i => i.Name);

                foreach (var i in indexes)
                {
                    var indexNode = tableIndexesNode.Nodes.Add(i.Name);

                    // Add index columns
                    var indexColumns = Database.Dmvs.IndexColumns
                                       .Where(ic => ic.ObjectID == type.t.TypeTableObjectId && ic.IndexID == i.IndexID);

                    foreach (var ic in indexColumns)
                    {
                        var tableTypeColumn = columns.Single(c => c.ColumnID == ic.ColumnID);
                        var typeName        = DatabaseMetaData.GetColumnTypeName(Database.Dmvs, tableTypeColumn);

                        indexNode.Nodes.Add($"{tableTypeColumn.Name} ({typeName})");
                    }
                }
            }
        }
        /// <summary>
        /// function to check if user try to either delete or remove
        /// last column which is marked as Maintain Version to false
        /// then return false, if there is data in respective Version Table
        /// </summary>
        /// <param name="delete"></param>
        /// <returns>bool (true/false)</returns>
        public bool CheckVersions(bool delete)
        {
            bool          check = true;
            StringBuilder sb    = new StringBuilder("SELECT COUNT(AD_Column_ID) FROM AD_Column WHERE AD_Table_ID = " + GetAD_Table_ID() + " AND IsMaintainVersions = 'Y' AND AD_Column_ID != " + GetAD_Column_ID());

            if (!delete)
            {
                if (!(Is_ValueChanged("IsMaintainVersions") && (Util.GetValueOfBool(Get_ValueOld("IsMaintainVersions")) && !Util.GetValueOfBool(Get_Value("IsMaintainVersions")))))
                {
                    check = false;
                }
            }
            else
            {
                if (!(Util.GetValueOfBool(Get_ValueOld("IsMaintainVersions"))))
                {
                    check = false;
                }
            }
            if (check)
            {
                int countVerCols = Util.GetValueOfInt(DB.ExecuteScalar(sb.ToString(), null, Get_Trx()));
                if (countVerCols == 0)
                {
                    sb.Clear();
                    sb.Append("SELECT TableName FROM AD_Table WHERE AD_Table_ID = " + GetAD_Table_ID());
                    string tableName = Util.GetValueOfString(DB.ExecuteScalar(sb.ToString(), null, Get_Trx()));
                    sb.Clear();

                    DatabaseMetaData md = new DatabaseMetaData();

                    //get columns of a table
                    DataSet dt = md.GetColumns("", DataBase.DB.GetSchema(), tableName + "_Ver");
                    md.Dispose();

                    // check whether version table exists in database
                    if (dt != null && dt.Tables[0] != null && dt.Tables[0].Rows.Count > 0)
                    {
                        MTable tblVer = MTable.Get(GetCtx(), tableName + "_Ver");
                        if (tblVer.HasVersionData(tableName + "_Ver"))
                        {
                            // if Maintain Version is marked on Table Level then allow to remove Maintain Version from Column
                            if (Util.GetValueOfString(DB.ExecuteScalar("SELECT IsMaintainVersions FROM AD_Table WHERE AD_Table_ID = " + GetAD_Table_ID(), null, Get_Trx())) == "Y")
                            {
                                return(true);
                            }
                            else
                            {
                                log.SaveError("VersionDataExists", Utility.Msg.GetElement(GetCtx(), "VersionDataExists"));
                                return(false);
                            }
                        }
                    }
                }
            }
            return(true);
        }
        private DatabaseMetaData getMetaData()

        {
            if (_dmd == null)
            {
                _dmd = _conn.getConnection().getMetaData();
            }

            return(_dmd);
        }
        /**
         *
         * returns the URL string for the given connection
         * IE: jdbc:mysql://localhost:3306/test
         * XXX: PHP returns Localhost via UNIX socket
         */
        public string getHostInfo()

        {
            if (_dmd == null)
            {
                _dmd = _conn.getConnection().getMetaData();
            }

            return(_dmd.getURL());
        }
Example #8
0
        public virtual TableMetaData getTableMetaData(string tableName)
        {
            TableMetaData result    = new TableMetaData();
            ResultSet     resultSet = null;

            try
            {
                try
                {
                    result.TableName = tableName;
                    DatabaseMetaData metaData = DbSqlSession.SqlSession.Connection.MetaData;

                    if (DbSqlSessionFactory.POSTGRES.Equals(DbSqlSession.DbSqlSessionFactory.DatabaseType))
                    {
                        tableName = tableName.ToLower();
                    }

                    string databaseSchema = DbSqlSession.DbSqlSessionFactory.DatabaseSchema;
                    tableName = DbSqlSession.prependDatabaseTablePrefix(tableName);

                    resultSet = metaData.getColumns(null, databaseSchema, tableName, null);
                    while (resultSet.next())
                    {
                        string name = resultSet.getString("COLUMN_NAME").ToUpper();
                        string type = resultSet.getString("TYPE_NAME").ToUpper();
                        result.addColumnMetaData(name, type);
                    }
                }
                catch (SQLException se)
                {
                    throw se;
                }
                finally
                {
                    if (resultSet != null)
                    {
                        resultSet.close();
                    }
                }
            }
            catch (Exception e)
            {
                throw LOG.retrieveMetadataException(e);
            }

            if (result.ColumnNames.Count == 0)
            {
                // According to API, when a table doesn't exist, null should be returned
                result = null;
            }
            return(result);
        }
Example #9
0
        /// <summary>
        /// Add Table in DB
        /// </summary>
        /// <param name="md">DB Info</param>
        /// <param name="catalog">current catalog</param>
        /// <param name="schema">schema</param>
        private void AddTable(DatabaseMetaData md, String catalog, String schema)
        {
            DataSet ds = md.GetTables();

            for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
            {
                String tableName = ds.Tables[0].Rows[i]["TABLE_NAME"].ToString();
                String tableType = ds.Tables[0].Rows[i]["TABLE_TYPE"].ToString();

                //	Try to find
                MTable table = MTable.Get(GetCtx(), tableName);
                //	Create new ?
                if (table == null)
                {
                    String tn = tableName.ToUpper();
                    if (tn.StartsWith("T_SELECTION") || //	temp table
                        tn.EndsWith("_VT") ||           //	print trl views
                        tn.EndsWith("_V") ||            //	views
                        tn.EndsWith("_V1") ||           //	views
                        tn.StartsWith("A_A") ||         //	asset tables not yet
                        tn.StartsWith("A_D") ||         //	asset tables not yet
                        (tn.IndexOf("$") != -1          //	oracle system tables
                        ) ||
                        (tn.IndexOf("EXPLAIN") != -1    //	explain plan
                        )
                        )
                    {
                        log.Fine("Ignored: " + tableName + " - " + tableType);
                        continue;
                    }
                    //
                    log.Info(tableName + " - " + tableType);

                    //	Create New
                    table = new MTable(GetCtx(), 0, Get_Trx());
                    table.SetEntityType(p_EntityType);
                    table.SetName(tableName);
                    table.SetTableName(tableName);
                    table.SetIsView("VIEW".Equals(tableType));
                    if (!table.Save())
                    {
                        continue;
                    }
                }
                //	Check Columns
                tableName = tableName.ToUpper();
                DataSet rsC = md.GetColumns(catalog, schema, tableName);
                //addTableColumn(GetCtx(), rsC, table, p_EntityType);
                //SubTableUtil.checkStandardColumns(table, p_EntityType);
            }
        }       //	addTable
        /**
         * Returns the client version
         * @deprecated
         */
        public string getClientInfo()
        {
            try {
                if (_dmd == null)
                {
                    _dmd = _conn.getConnection().getMetaData();
                }

                return(_dmd.getDatabaseProductVersion());
            } catch (SQLException e) {
                log.log(Level.FINE, e.ToString(), e);
                return(null);
            }
        }
Example #11
0
        internal DatabaseMetaData GetMetaData()
        {
            if (metaData == null)
            {
                lock (metaDataLock)
                {
                    if (metaData == null)
                    {
                        metaData = new DatabaseMetaData(this);
                    }

                    Thread.MemoryBarrier();
                }
            }

            return(metaData);
        }
Example #12
0
 /// <summary>
 /// <inheritDoc/>
 ///
 /// </summary>
 public virtual void SetConf(Configuration conf)
 {
     dbConf = new DBConfiguration(conf);
     try
     {
         this.connection = CreateConnection();
         DatabaseMetaData dbMeta = connection.GetMetaData();
         this.dbProductName = StringUtils.ToUpperCase(dbMeta.GetDatabaseProductName());
     }
     catch (Exception ex)
     {
         throw new RuntimeException(ex);
     }
     tableName  = dbConf.GetInputTableName();
     fieldNames = dbConf.GetInputFieldNames();
     conditions = dbConf.GetInputConditions();
 }
Example #13
0
        public virtual bool isTablePresent(string tableName)
        {
            tableName = prependDatabaseTablePrefix(tableName);
            Connection connection = null;

            try
            {
                connection = sqlSession.Connection;
                DatabaseMetaData databaseMetaData = connection.MetaData;
                ResultSet        tables           = null;

                string schema = this.connectionMetadataDefaultSchema;
                if (!string.ReferenceEquals(dbSqlSessionFactory.DatabaseSchema, null))
                {
                    schema = dbSqlSessionFactory.DatabaseSchema;
                }

                string databaseType = dbSqlSessionFactory.DatabaseType;

                if (DbSqlSessionFactory.POSTGRES.Equals(databaseType))
                {
                    tableName = tableName.ToLower();
                }

                try
                {
                    tables = databaseMetaData.getTables(this.connectionMetadataDefaultCatalog, schema, tableName, JDBC_METADATA_TABLE_TYPES);
                    return(tables.next());
                }
                finally
                {
                    if (tables != null)
                    {
                        tables.close();
                    }
                }
            }
            catch (Exception e)
            {
                throw LOG.checkDatabaseTableException(e);
            }
        }
Example #14
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="connStr"></param>
        /// <returns></returns>
        public DatabaseMetaData GetMetaDataForDatabase(string connStr)
        {
            DatabaseMetaData dmd = new DatabaseMetaData();

            StoredProcedureMetadataAccess spma = new StoredProcedureMetadataAccess();
            TableMetadataAccess           tma  = new TableMetadataAccess();
            ViewMetadataAccess            vma  = new ViewMetadataAccess();

            dmd.Tables = tma.GetMasterTableMetadata(connStr);
            dmd.Views  = vma.GetMasterViewMetadata(connStr);

            ColumnMetadataAccess cma = new ColumnMetadataAccess();

            foreach (var item in dmd.Views)
            {
                item.Columns = cma.GetColumnMetadata(item.Level1Name, item.Schema, connStr, Level1Types.View);
            }
            dmd.StoredProcedures = spma.GetStoredProcedureMetaData(connStr);

            return(dmd);
        }
Example #15
0
        }       //	prepare

        /// <summary>
        /// Process
        /// </summary>
        /// <returns></returns>
        protected override String DoIt()
        {
            if (p_AD_Table_ID == 0)
            {
                throw new Exception("@NotFound@ @AD_Table_ID@ " + p_AD_Table_ID);
            }
            log.Info("EntityType=" + p_EntityType
                     + ", AllTables=" + p_AllTables
                     + ", AD_Table_ID=" + p_AD_Table_ID);

            Trx trx             = Trx.Get("getDatabaseMetaData");
            DatabaseMetaData md = new DatabaseMetaData();

            string catalog = "";
            string schema  = DataBase.DB.GetSchema();

            if (p_AllTables)
            {
                AddTable(md, catalog, schema);
            }
            else
            {
                MTable table = new MTable(GetCtx(), p_AD_Table_ID, Get_Trx());
                if ((table == null) || (table.Get_ID() == 0))
                {
                    throw new Exception("@NotFound@ @AD_Table_ID@ " + p_AD_Table_ID);
                }
                log.Info(table.GetTableName() + ", EntityType=" + p_EntityType);
                String tableName = table.GetTableName();

                //tableName = tableName.ToUpper();
                DataSet rs = md.GetColumns(catalog, schema, tableName.ToUpper());
                AddTableColumn(GetCtx(), rs, table, p_EntityType);
                SubTableUtil.CheckStandardColumns(table, p_EntityType);
            }
            md.Dispose();
            trx.Close();
            return("#" + m_count);
        }
Example #16
0
        /// <summary>
        /// Sync column or table passed in the parameter
        /// </summary>
        /// <param name="table"></param>
        /// <param name="column"></param>
        /// <param name="noColumns">OUT parameter, returns 0 if table is being synched for the first time</param>
        /// <returns>string message</returns>
        public static string SyncColumn(MTable table, MColumn column, out int noColumns)
        {
            DatabaseMetaData md      = new DatabaseMetaData();
            String           catalog = "";
            String           schema  = DataBase.DB.GetSchema();

            //get table name
            string tableName = table.GetTableName();

            noColumns = 0;
            string sql = null;
            //get columns of a table
            DataSet dt = md.GetColumns(catalog, schema, tableName);

            md.Dispose();
            //for each column
            for (noColumns = 0; noColumns < dt.Tables[0].Rows.Count; noColumns++)
            {
                string columnName = dt.Tables[0].Rows[noColumns]["COLUMN_NAME"].ToString().ToLower();
                if (!columnName.Equals(column.GetColumnName().ToLower()))
                {
                    continue;
                }

                //check if column is null or not
                string dtColumnName = "is_nullable";
                string value        = "YES";
                //if database is oracle
                if (DatabaseType.IsOracle)
                {
                    dtColumnName = "NULLABLE";
                    value        = "Y";
                }
                bool notNull = false;
                //check if column is null
                if (dt.Tables[0].Rows[noColumns][dtColumnName].ToString() == value)
                {
                    notNull = false;
                }
                else
                {
                    notNull = true;
                }
                //............................

                //if column is virtual column then alter table and drop this column
                if (column.IsVirtualColumn())
                {
                    sql = "ALTER TABLE " + table.GetTableName()
                          + " DROP COLUMN " + columnName;
                }
                else
                {
                    sql = column.GetSQLModify(table, column.IsMandatory() != notNull);
                    noColumns++;
                    break;
                }
            }
            dt = null;
            //while (rs.next())
            //{
            //    noColumns++;
            //    String columnName = rs.getString ("COLUMN_NAME");
            //    if (!columnName.equalsIgnoreCase(column.getColumnName()))
            //        continue;

            //    //	update existing column
            //    boolean notNull = DatabaseMetaData.columnNoNulls == rs.getInt("NULLABLE");
            //    if (column.isVirtualColumn())
            //        sql = "ALTER TABLE " + table.getTableName()
            //            + " DROP COLUMN " + columnName;
            //    else
            //        sql = column.getSQLModify(table, column.isMandatory() != notNull);
            //    break;
            //}
            //rs.close();
            //rs = null;

            //	No Table
            if (noColumns == 0)
            {
                sql = table.GetSQLCreate();
            }
            //	No existing column
            else if (sql == null)
            {
                if (column.IsVirtualColumn())
                {
                    return("@IsVirtualColumn@");
                }
                sql = column.GetSQLAdd(table);
            }
            return(sql);
        }
Example #17
0
        }       //	generate

        /// <summary>
        /// Generate Delta and History Table
        /// </summary>
        /// <returns></returns>
        private bool GenerateTable()
        {
            //	Table
            m_derivedTable = MTable.Get(m_ctx, m_dTableName);
            if (m_derivedTable == null)
            {
                m_derivedTable = new MTable(m_ctx, 0, null);
            }

            PO.CopyValues(m_baseTable, m_derivedTable);
            m_derivedTable.SetTableName(m_dTableName);
            m_derivedTable.SetName(m_derivedTable.GetName() + " SubTable");
            m_derivedTable.SetSubTableType(m_derivedTableType);
            m_derivedTable.SetBase_Table_ID(m_baseTable.GetAD_Table_ID());
            if (!m_derivedTable.Save())
            {
                throw new Exception("Cannot save " + m_dTableName);
            }

            MColumn[] dCols = SyncMColumns(true);

            //	Sync Columns in Database
            List <MColumn> list = new List <MColumn>(dCols.Length);

            foreach (MColumn element in dCols)
            {
                list.Add(element);
            }
            Trx trx = Trx.Get("getDatabaseMetaData");
            //

            String catalog   = "";
            String schema    = DataBase.DB.GetSchema();
            String tableName = m_dTableName;

            tableName = tableName.ToUpper();
            int noColumns = 0;
            //
            DataSet rs = null;

            using (DatabaseMetaData md = new DatabaseMetaData())
            {
                rs = md.GetColumns(catalog, schema, tableName);
            }
            for (int rscount = 0; rscount <= rs.Tables[0].Rows.Count - 1; rscount++)
            {
                noColumns++;
                String columnName = rs.Tables[0].Rows[rscount]["COLUMN_NAME"].ToString();
                bool   found      = false;
                for (int i = 0; i < list.Count; i++)
                {
                    MColumn dCol = list[i];
                    if (columnName.Equals(dCol.GetColumnName(), StringComparison.OrdinalIgnoreCase))
                    {
                        String sql = dCol.GetSQLModify(m_derivedTable, false);
                        DataBase.DB.ExecuteUpdateMultiple(sql, false, null);
                        found = true;
                        list.Remove(list[i]);
                        break;
                    }
                }
                if (!found)
                {
                    String sql = "ALTER TABLE " + m_dTableName + " DROP COLUMN " + columnName;
                    DataBase.DB.ExecuteQuery(sql, null);
                }
            }
            //rs.close();
            trx.Close();

            //	No Columns
            if (noColumns == 0)
            {
                String sql = m_derivedTable.GetSQLCreate();
                return(DataBase.DB.ExecuteUpdateMultiple(sql, false, null) >= 0);
            }
            //	New Columns
            for (int i = 0; i < list.Count(); i++)
            {
                MColumn dCol = list[i];
                if (dCol.IsVirtualColumn())
                {
                    continue;
                }
                String sql = dCol.GetSQLAdd(m_derivedTable);
                DataBase.DB.ExecuteUpdateMultiple(sql, false, null);
            }
            return(true);
        }       //	generateTable
        /// <summary>
        /// Process logic to verify database columns and Columns in Application Dictionary
        /// </summary>
        /// <returns></returns>
        protected override string DoIt()
        {
            // if table not found, in case if run from menu
            // or from table, then return with message
            if (p_AD_Table_ID.Trim() == "")
            {
                return(Msg.GetMsg(GetCtx(), "VIS_TableNotSelected"));
            }

            DataSet dsDT = DB.ExecuteDataset("SELECT AD_Reference_ID, Name FROM AD_Reference WHERE IsActive = 'Y' AND ValidationType = 'D'");

            string[] tableIDs = p_AD_Table_ID.Split(',');

            // loop through tables selected in parameter or
            // if run from window then single table ID
            for (int i = 0; i < tableIDs.Length; i++)
            {
                int AD_Table_ID = Util.GetValueOfInt(tableIDs[i]);

                MTable table = MTable.Get(GetCtx(), AD_Table_ID);

                // Check on table whether it has single or multiple keys
                bool hasSingleKey = true;
                if (!table.IsSingleKey())
                {
                    hasSingleKey = false;
                }

                if (table == null || table.Get_ID() == 0)
                {
                    return(Msg.GetMsg(GetCtx(), "VIS_TableNotFound"));
                }

                // create HTML for tables
                sbHTML.Append("<div class='vis-val-tc-parCtr'> "
                              + "<div class='vis-val-tc-hdr'><label>" + Msg.Translate(GetCtx(), "AD_Table_ID") + ": </label>" + table.GetTableName() + "</div>"
                              + "<div class='vis-val-tc-colCtr'>"
                              + "<div class='vis-val-tc-colHdrs'>" + Msg.GetMsg(GetCtx(), "VIS_ADCols") + "</div>"
                              + "<div class='vis-val-tc-colHdrs'>" + Msg.GetMsg(GetCtx(), "VIS_DBCols") + "</div>"
                              + "</div>");

                //	Find Column in Database
                DatabaseMetaData md      = new DatabaseMetaData();
                String           catalog = "";
                String           schema  = DataBase.DB.GetSchema();

                //get table name
                string tableName = table.GetTableName();
                //get columns of a table
                DataSet dt        = md.GetColumns(catalog, schema, tableName);
                bool    hasDBCols = false;
                if (dt.Tables[0].Rows.Count > 0)
                {
                    hasDBCols = true;
                }

                // get all columns from table
                MColumn[] columnsAD = table.GetColumns(true);

                // variables to create HTML as string for both AD and in DB
                StringBuilder adColName = new StringBuilder("");
                StringBuilder dbColName = new StringBuilder("");

                List <string> ADCols = new List <string>();

                // check whether process is running from menu or from table and column Window
                // if process is executing from window then apply style
                string mainMenuWrap = "";
                if (!fromMenu)
                {
                    mainMenuWrap = "style='max-height: 450px;'";
                }

                sbHTML.Append("<div class='vis-val-tc-mainwrap' " + mainMenuWrap + "> ");

                if (columnsAD.Length > 0)
                {
                    // loop through Columns present in Application dictionary
                    for (int c = 0; c < columnsAD.Length; c++)
                    {
                        var col = columnsAD[c];

                        adColName.Clear();
                        adColName.Append(col.GetColumnName().ToUpper());

                        DataRow[] dr = null;
                        if (hasDBCols && dt.Tables[0].Rows.Count > 0)
                        {
                            dr = dt.Tables[0].Select("COLUMN_NAME = '" + adColName.ToString() + "'");
                        }

                        DataRow[] drRef = dsDT.Tables[0].Select("AD_Reference_ID = " + col.GetAD_Reference_ID());

                        // if column is virtual, then add style
                        var style = " color: red; font-style: italic;";
                        if (col.IsVirtualColumn() || (dr != null && dr.Length > 0))
                        {
                            style = " color: green;";
                        }

                        // add different style for key column
                        string keyCol = "";
                        // Condition for Multikey columns and Single key to mark as Primary key columns
                        if ((hasSingleKey && col.GetAD_Reference_ID() == 13) || (!hasSingleKey && col.IsParent()))
                        {
                            keyCol = " * ";
                            style += " font-weight: bold; font-size: initial;";
                        }

                        sbHTML.Append("<div class='vis-val-tc-colWid'>"
                                      + "<div class='vis-val-tc-col-l' style='" + style + "'> " + keyCol + " " + col.GetColumnName() + " (" + drRef[0]["Name"] + " (" + col.GetFieldLength() + ") " + " ) " + "</div>");
                        if (dr != null && dr.Length > 0)
                        {
                            sbHTML.Append("<div class='vis-val-tc-col-r' style='" + style + "'>" + Util.GetValueOfString(dr[0]["Column_Name"]) + " (" + Util.GetValueOfString(dr[0]["DATATYPE"]) + " (" + Util.GetValueOfInt(dr[0]["LENGTH"]) + ") " + " ) " + "</div>");
                        }
                        else
                        {
                            if (col.IsVirtualColumn())
                            {
                                sbHTML.Append("<div class='vis-val-tc-virCol' style='" + style + "'>" + Msg.GetMsg(GetCtx(), "VIS_VirtualCol") + "</div>");
                            }
                            else
                            {
                                sbHTML.Append("<div class='vis-val-tc-col-r' style='" + style + "'>" + Msg.GetMsg(GetCtx(), "VIS_DBNotFound") + "</div>");
                            }
                        }
                        sbHTML.Append("</div>");
                        ADCols.Add(adColName.ToString());
                    }
                }

                // if columns present in database
                if (hasDBCols)
                {
                    // loop through columns in DB
                    for (int d = 0; d < dt.Tables[0].Rows.Count; d++)
                    {
                        dbColName.Clear();
                        dbColName.Append(dt.Tables[0].Rows[d]["Column_Name"]);
                        if (ADCols.Contains(dbColName.ToString()))
                        {
                            continue;
                        }
                        else
                        {
                            sbHTML.Append("<div class='vis-val-tc-colWid'>");

                            DataRow dr = null;
                            if (hasDBCols && dt.Tables[0].Rows.Count > 0)
                            {
                                dr = dt.Tables[0].Rows[d];
                            }

                            if (dr != null)
                            {
                                sbHTML.Append("<div class='vis-val-tc-col-red-r'>" + Util.GetValueOfString(dr["Column_Name"]) + " (" + Util.GetValueOfString(dr["DATATYPE"]) + " (" + Util.GetValueOfInt(dr["LENGTH"]) + ") " + " ) " + "</div>");
                            }
                            else
                            {
                                sbHTML.Append("<div class='vis-val-tc-col-red-r'>" + Msg.GetMsg(GetCtx(), "VIS_ADNotFound") + "</div>");
                            }

                            sbHTML.Append("<div class='vis-val-tc-col-red-l'>" + Msg.GetMsg(GetCtx(), "VIS_ADNotFound") + "</div>");

                            sbHTML.Append("</div>");
                        }
                    }
                }

                sbHTML.Append("</div>");

                sbHTML.Append("</div>");

                md.Dispose();

                ProcessInfo pi = GetProcessInfo();
                pi.SetCustomHTML(sbHTML.ToString());
            }

            return("");
        }
Example #19
0
		private void InitKeyInfo(DataRow row, DatabaseMetaData dbMetaData, String catalog, String schema, String table) {
			string column = (string)row [(int)SCHEMA_TABLE.BaseColumnName];

			row [(int)SCHEMA_TABLE.IsUnique] = false;
			row [(int)SCHEMA_TABLE.IsKey] = false;
			row [(int)SCHEMA_TABLE.IsIdentity] = false;
			row [(int)SCHEMA_TABLE.IsRowVersion] = false;

			if ((_command.Behavior & CommandBehavior.KeyInfo) == 0)
				return;

			if(table == null || column == null || dbMetaData == null)
				return;

			ResultSet versionCol = dbMetaData.getVersionColumns(catalog, schema, table);
			try {
				while(versionCol.next()) {
					if(versionCol.getString("COLUMN_NAME") == column) {
						if (DatabaseMetaData__Finals.versionColumnPseudo == versionCol.getShort("PSEUDO_COLUMN")) {
							row [(int)SCHEMA_TABLE.IsIdentity] = true;
							row [(int)SCHEMA_TABLE.IsRowVersion] = true;
						}
					}
				}
			}
			finally {
				versionCol.close();
			}

			ResultSet primaryKeys = dbMetaData.getPrimaryKeys(catalog,schema,table);
			bool primaryKeyExists = false;
			int columnCount = 0;
			try {
				while(primaryKeys.next()) {
					columnCount++;
					if(primaryKeys.getString("COLUMN_NAME") == column) {
						row [(int)SCHEMA_TABLE.IsKey] = true;
						primaryKeyExists = true;
					}
				}
				// column constitutes a key by itself, so it should be marked as unique 
				if ((columnCount == 1) && (((bool)row [(int)SCHEMA_TABLE.IsKey]) == true)) {
					row [(int)SCHEMA_TABLE.IsUnique] = true;
				}
			}
			finally {
				primaryKeys.close();
			}

			ResultSet indexInfoRes = dbMetaData.getIndexInfo(catalog,schema,table,true,false);
			string currentIndexName = null;
			columnCount = 0;
			bool belongsToCurrentIndex = false;
			bool atFirstIndex = true;
			bool uniqueKeyExists = false;
			try {
				while(indexInfoRes.next()) {
					if (indexInfoRes.getShort("TYPE") ==  DatabaseMetaData__Finals.tableIndexStatistic) {
						// index of type tableIndexStatistic identifies table statistics - ignore it
						continue;
					}
					
					uniqueKeyExists = true;
					string iname = indexInfoRes.getString("INDEX_NAME");
					if (currentIndexName == iname) {
						// we're within the rows of the same index 
						columnCount++;
					}
					else {
						// we jump to row of new index 
						if (belongsToCurrentIndex && columnCount == 1) {
							// there is a constraint of type UNIQUE that applies only to this column
							row [(int)SCHEMA_TABLE.IsUnique] = true;
						}

						if (currentIndexName != null) {
							atFirstIndex = false;
						}
						currentIndexName = iname;
						columnCount = 1;
						belongsToCurrentIndex = false;
					}

					if(indexInfoRes.getString("COLUMN_NAME") == column) {
						// FIXME : this will cause "spare" columns marked as IsKey. Needs future investigation.
						// only the first index we met should be marked as a key
						//if (atFirstIndex) {
							row [(int)SCHEMA_TABLE.IsKey] = true;
						//}
						belongsToCurrentIndex = true;						
					}
				}
				// the column appears in the last index, which is single-column
				if (belongsToCurrentIndex && columnCount == 1) {
					// there is a constraint of type UNIQUE that applies only to this column
					row [(int)SCHEMA_TABLE.IsUnique] = true;
				}
			}
			finally {
				indexInfoRes.close();
			}			

			if(!primaryKeyExists && !uniqueKeyExists) {
				ResultSet bestRowId = dbMetaData.getBestRowIdentifier(catalog, schema, table, DatabaseMetaData__Finals.bestRowTemporary, false);
				try {
					while(bestRowId.next()) {
						if(bestRowId.getString("COLUMN_NAME") == column)
							row [(int)SCHEMA_TABLE.IsKey] = true;
					}
				}
				finally {
					bestRowId.close();
				}
			}
		}
Example #20
0
        }//	prepare

        /// <summary>
        /// Alert table
        /// </summary>
        /// <returns>int</returns>
        ///
        override protected string DoIt()
        {
            string exception = "";

            log.Info("C_Column_ID=" + p_AD_Column_ID);
            if (p_AD_Column_ID == 0)
            {
                //    return "";
                throw new Exception("@No@ @AD_Column_ID@");
            }
            //IDbTransaction trx = ExecuteQuery.GerServerTransaction();
            MColumn column = new MColumn(GetCtx(), p_AD_Column_ID, Get_Trx());

            if (column.Get_ID() == 0)
            {
                throw new Exception("@NotFound@ @AD_Column_ID@" + p_AD_Column_ID);
            }

            MTable table = MTable.Get(GetCtx(), column.GetAD_Table_ID());

            if (table.Get_ID() == 0)
            {
                throw new Exception("@NotFound@ @AD_Table_ID@" + column.GetAD_Table_ID());
            }
            //	Find Column in Database

            DatabaseMetaData md      = new DatabaseMetaData();
            String           catalog = "";
            String           schema  = DataBase.DB.GetSchema();

            //get table name
            string tableName = table.GetTableName();


            int    noColumns;
            string sql = null;
            //get columns of a table
            DataSet dt = md.GetColumns(catalog, schema, tableName);

            md.Dispose();
            //for each column
            for (noColumns = 0; noColumns < dt.Tables[0].Rows.Count; noColumns++)
            {
                string columnName = dt.Tables[0].Rows[noColumns]["COLUMN_NAME"].ToString().ToLower();
                if (!columnName.Equals(column.GetColumnName().ToLower()))
                {
                    continue;
                }

                //check if column is null or not

                string dtColumnName = "is_nullable";
                string value        = "YES";
                //if database is oracle
                if (DatabaseType.IsOracle)
                {
                    dtColumnName = "NULLABLE";
                    value        = "Y";
                }
                bool notNull = false;
                //check if column is null
                if (dt.Tables[0].Rows[noColumns][dtColumnName].ToString() == value)
                {
                    notNull = false;
                }
                else
                {
                    notNull = true;
                }
                //............................

                //if column is virtual column then alter table and drop this column
                if (column.IsVirtualColumn())
                {
                    sql = "ALTER TABLE " + table.GetTableName()
                          + " DROP COLUMN " + columnName;
                }
                else
                {
                    sql = column.GetSQLModify(table, column.IsMandatory() != notNull);
                    noColumns++;
                    break;
                }
            }
            dt = null;

            //while (rs.next())
            //{
            //    noColumns++;
            //    String columnName = rs.getString ("COLUMN_NAME");
            //    if (!columnName.equalsIgnoreCase(column.getColumnName()))
            //        continue;

            //    //	update existing column
            //    boolean notNull = DatabaseMetaData.columnNoNulls == rs.getInt("NULLABLE");
            //    if (column.isVirtualColumn())
            //        sql = "ALTER TABLE " + table.getTableName()
            //            + " DROP COLUMN " + columnName;
            //    else
            //        sql = column.getSQLModify(table, column.isMandatory() != notNull);
            //    break;
            //}
            //rs.close();
            //rs = null;

            //	No Table
            if (noColumns == 0)
            {
                sql = table.GetSQLCreate();
            }
            //	No existing column
            else if (sql == null)
            {
                if (column.IsVirtualColumn())
                {
                    return("@IsVirtualColumn@");
                }
                sql = column.GetSQLAdd(table);
            }

            int no = 0;

            if (sql.IndexOf("; ") == -1)
            {
                //no =
                //ExecuteQuery.ExecuteNonQuery(sql, false, Get_Trx());
                try
                {
                    no = DataBase.DB.ExecuteQuery(sql, null, Get_Trx());

                    AddLog(0, DateTime.MinValue, Decimal.Parse(no.ToString()), sql);
                }
                catch (Exception ex)
                {
                    exception = ex.Message;
                }
                //addLog (0, null, new BigDecimal(no), sql);
            }
            else
            {
                //string ss = "; ";
                string[] statements = sql.Split(';');
                for (int i = 0; i < statements.Length; i++)
                {
                    int count = DataBase.DB.ExecuteQuery(statements[i].ToString(), null, Get_Trx());
                    AddLog(0, DateTime.MinValue, Decimal.Parse(count.ToString()), statements[i]);

                    no += count;
                    //ExecuteQuery.ExecuteNonQuery(statements[i].ToString());
                }
            }

            if (no == -1)
            {
                string        msg = "@Error@ ";
                ValueNamePair pp  = VAdvantage.Logging.VLogger.RetrieveError();
                if (pp != null)
                {
                    msg += exception + " - ";
                }
                msg += sql;
                throw new Exception(msg);
            }
            string r = createFK();

            return(sql + "; " + r);
        }       //	doIt
Example #21
0
        }       //	doIt

        private String createFK()
        {
            String returnMessage = "";

            if (p_AD_Column_ID == 0)
            {
                throw new Exception("@No@ @AD_Column_ID@");
            }
            MColumn column = new MColumn(GetCtx(), p_AD_Column_ID, Get_Trx());

            if (column.Get_ID() == 0)
            {
                throw new Exception("@NotFound@ @AD_Column_ID@ " + p_AD_Column_ID);
            }

            MTable table = MTable.Get(GetCtx(), column.GetAD_Table_ID());

            if (table.Get_ID() == 0)
            {
                throw new Exception("@NotFound@ @AD_Table_ID@ " + column.GetAD_Table_ID());
            }

            String fk;

            if ((column.GetAD_Reference_ID() == DisplayType.Account) &&
                !(column.GetColumnName().Equals("C_ValidCombination_ID", StringComparison.OrdinalIgnoreCase)))
            {
                fk = "SELECT t.TableName, c.ColumnName, c.AD_Column_ID,"
                     + " cPK.AD_Column_ID, tPK.TableName, cPK.ColumnName, c.ConstraintType,"
                     + " 'FK' || t.AD_Table_ID || '_' || c.AD_Column_ID AS ConstraintName "
                     + "FROM AD_Table t"
                     + " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID)"
                     + " INNER JOIN AD_Column cPK ON (cPK.AD_Column_ID=1014)"
                     + " INNER JOIN AD_Table tPK ON (cPK.AD_Table_ID=tPK.AD_Table_ID) "
                     + "WHERE c.IsKey='N' AND c.AD_Reference_ID=25 AND C.AD_Column_ID= @param"  //	Acct
                     + " AND c.ColumnName<>'C_ValidCombination_ID'"
                     + " AND t.IsView='N' "
                     + " ORDER BY t.TableName, c.ColumnName";
            }
            else if ((column.GetAD_Reference_ID() == DisplayType.PAttribute) &&
                     !(column.GetColumnName().Equals("C_ValidCombination_ID", StringComparison.OrdinalIgnoreCase)))
            {
                fk = "SELECT t.TableName, c.ColumnName, c.AD_Column_ID,"
                     + " cPK.AD_Column_ID, tPK.TableName, cPK.ColumnName, c.ConstraintType,"
                     + " 'FK' || t.AD_Table_ID || '_' || c.AD_Column_ID AS ConstraintName "
                     + "FROM AD_Table t"
                     + " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID)"
                     + " INNER JOIN AD_Column cPK ON (cPK.AD_Column_ID=8472)"
                     + " INNER JOIN AD_Table tPK ON (cPK.AD_Table_ID=tPK.AD_Table_ID) "
                     + "WHERE c.IsKey='N' AND c.AD_Reference_ID=35 AND C.AD_Column_ID=@param"   //	Product Attribute
                     + " AND c.ColumnName<>'C_ValidCombination_ID'"
                     + " AND t.IsView='N' "
                     + " ORDER BY t.TableName, c.ColumnName";
            }
            else if (((column.GetAD_Reference_ID() == DisplayType.TableDir) || (column.GetAD_Reference_ID() == DisplayType.Search)) &&
                     (column.GetAD_Reference_Value_ID() == 0))
            {
                fk = "SELECT t.TableName, c.ColumnName, c.AD_Column_ID,"
                     + " cPK.AD_Column_ID, tPK.TableName, cPK.ColumnName, c.ConstraintType,"
                     + " 'FK' || t.AD_Table_ID || '_' || c.AD_Column_ID AS ConstraintName "
                     + "FROM AD_Table t"
                     + " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID)"
                     + " INNER JOIN AD_Column cPK ON (c.AD_Element_ID=cPK.AD_Element_ID AND cPK.IsKey='Y')"
                     + " INNER JOIN AD_Table tPK ON (cPK.AD_Table_ID=tPK.AD_Table_ID AND tPK.IsView='N') "
                     + "WHERE c.IsKey='N' AND c.AD_Reference_Value_ID IS NULL AND C.AD_Column_ID=@param"
                     + " AND t.IsView='N' AND c.ColumnSQL IS NULL "
                     + " ORDER BY t.TableName, c.ColumnName";
            }
            else //	Table
            {
                fk = "SELECT t.TableName, c.ColumnName, c.AD_Column_ID,"
                     + " cPK.AD_Column_ID, tPK.TableName, cPK.ColumnName, c.ConstraintType,"
                     + " 'FK' || t.AD_Table_ID || '_' || c.AD_Column_ID AS ConstraintName "
                     + "FROM AD_Table t"
                     + " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID AND c.AD_Reference_Value_ID IS NOT NULL)"
                     + " INNER JOIN AD_Ref_Table rt ON (c.AD_Reference_Value_ID=rt.AD_Reference_ID)"
                     + " INNER JOIN AD_Column cPK ON (rt.Column_Key_ID=cPK.AD_Column_ID)"
                     + " INNER JOIN AD_Table tPK ON (cPK.AD_Table_ID=tPK.AD_Table_ID) "
                     + "WHERE c.IsKey='N'"
                     + " AND t.IsView='N' AND c.ColumnSQL IS NULL AND C.AD_Column_ID=@param"
                     + " ORDER BY t.TableName, c.ColumnName";
            }

            SqlParameter[] pstmt = null;
            DataSet        ds    = null;

            try
            {
                /*Find foreign key relation in Database
                 * */
                //Trx trx = Trx.Get("getDatabaseMetaData");
                DatabaseMetaData md        = new DatabaseMetaData();
                String           catalog   = "";// DB.getCatalog();
                String           schema    = DB.GetSchema();
                String           tableName = table.GetTableName();



                String dropsql = null;
                int    no      = 0;

                String constraintNameDB = null;
                String PKTableNameDB    = null;
                String PKColumnNameDB   = null;
                int    constraintTypeDB = 0;

                /* Get foreign key information from DatabaseMetadata
                 * */
                ds = md.GetForeignKeys(catalog, schema, tableName);
                md.Dispose();
                if (ds != null && ds.Tables[0].Rows.Count > 0)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        Dictionary <String, String> fkcolumnDetail = md.GetForeignColumnDetail(ds.Tables[0].Rows[i]);
                        // string sql = "SELECT column_name FROM user_cons_columns WHERE constraint_name='" + ds.Tables[0].Rows[i]["FOREIGN_KEY_CONSTRAINT_NAME"].ToString() + "'";
                        //string fkcolumnName = Util.GetValueOfString(DB.ExecuteScalar(sql));

                        if (fkcolumnDetail["FK_Column_Name"].Equals(column.GetColumnName(), StringComparison.OrdinalIgnoreCase))
                        {
                            constraintNameDB = fkcolumnDetail["ConstraintNameDB"];
                            PKTableNameDB    = fkcolumnDetail["PK_Table_Name"];                       //rs.GetString("PKTABLE_NAME");
                            PKColumnNameDB   = fkcolumnDetail["PK_Column_Name"];                      //rs.GetString("PKCOLUMN_NAME");
                            constraintTypeDB = md.GetConstraintTypeDB(fkcolumnDetail["Delete_Rule"]); //rs.getShort("DELETE_RULE");
                            break;
                        }
                    }
                }


                pstmt    = new SqlParameter[1];
                pstmt[0] = new SqlParameter("@param", column.Get_ID());

                ds = DB.ExecuteDataset(fk, pstmt, Get_Trx());

                if (ds != null && ds.Tables[0].Rows.Count > 0)
                {
                    String TableName  = ds.Tables[0].Rows[0]["TableName"].ToString();
                    String ColumnName = ds.Tables[0].Rows[0]["ColumnName"].ToString();
                    //	int AD_Column_ID = rs.getInt (3);
                    //	int PK_Column_ID = rs.getInt (4);
                    String PKTableName    = ds.Tables[0].Rows[0]["TableName1"].ToString();
                    String PKColumnName   = ds.Tables[0].Rows[0]["ColumnName1"].ToString();
                    String ConstraintType = ds.Tables[0].Rows[0]["ConstraintType"].ToString();
                    String ConstraintName = ds.Tables[0].Rows[0]["ConstraintName"].ToString();

                    /* verify if the constraint in DB is different than the one to be created */
                    Boolean modified = true;
                    if (constraintNameDB != null)
                    {
                        if (((constraintNameDB.Equals(ConstraintName, StringComparison.OrdinalIgnoreCase)) &&
                             (PKTableNameDB != null) && (PKTableNameDB.Equals(PKTableName, StringComparison.OrdinalIgnoreCase)) &&
                             (PKColumnNameDB != null) && (PKColumnNameDB.Equals(PKColumnName, StringComparison.OrdinalIgnoreCase)) &&
                             ((constraintTypeDB == DatabaseMetaData.importedKeyRestrict) &&
                              (X_AD_Column.CONSTRAINTTYPE_Restrict.Equals(ConstraintType) ||
                               X_AD_Column.CONSTRAINTTYPE_RistrictTrigger.Equals(ConstraintType))))
                            ||
                            ((constraintTypeDB == DatabaseMetaData.importedKeyCascade) &&
                             (X_AD_Column.CONSTRAINTTYPE_Cascade.Equals(ConstraintType) ||
                              X_AD_Column.CONSTRAINTTYPE_CascadeTrigger.Equals(ConstraintType)))
                            ||
                            ((constraintTypeDB == DatabaseMetaData.importedKeySetNull) &&
                             (X_AD_Column.CONSTRAINTTYPE_Null.Equals(ConstraintType)))

                            )
                        {
                            modified = false;
                        }

                        else
                        {
                            dropsql = "ALTER TABLE " + table.GetTableName()
                                      + " DROP CONSTRAINT " + constraintNameDB;
                        }
                    }
                    if (modified)
                    {
                        StringBuilder sql = null;
                        try
                        {
                            if (dropsql != null)
                            {
                                /* Drop the existing constraint */
                                //no = DB.executeUpdate(Get_Trx(), dropsql);

                                no = DB.ExecuteQuery(dropsql, null, Get_Trx());
                                AddLog(0, null, Decimal.Parse(no.ToString()), dropsql);
                            }
                            /* Now create the sql foreign key constraint */
                            sql = new StringBuilder("ALTER TABLE ")
                                  .Append(TableName)
                                  .Append(" ADD CONSTRAINT ").Append(ConstraintName)
                                  .Append(" FOREIGN KEY (").Append(ColumnName)
                                  .Append(") REFERENCES ").Append(PKTableName)
                                  .Append(" (").Append(PKColumnName).Append(")");
                            Boolean createfk = true;
                            if (!String.IsNullOrEmpty(ConstraintType))
                            {
                                if (X_AD_Column.CONSTRAINTTYPE_DoNOTCreate.Equals(ConstraintType))
                                {
                                    createfk = false;
                                }
                                else if (X_AD_Column.CONSTRAINTTYPE_Restrict.Equals(ConstraintType) ||
                                         X_AD_Column.CONSTRAINTTYPE_RistrictTrigger.Equals(ConstraintType))
                                {
                                    ;
                                }
                                else if (X_AD_Column.CONSTRAINTTYPE_Cascade.Equals(ConstraintType) ||
                                         X_AD_Column.CONSTRAINTTYPE_CascadeTrigger.Equals(ConstraintType))
                                {
                                    sql.Append(" ON DELETE CASCADE");
                                }
                                else if (X_AD_Column.CONSTRAINTTYPE_Null.Equals(ConstraintType) ||
                                         X_AD_Column.CONSTRAINTTYPE_NullTrigger.Equals(ConstraintType))
                                {
                                    sql.Append(" ON DELETE SET NULL");
                                }
                            }
                            else
                            {
                                createfk = false;
                            }
                            /* Create the constraint */
                            if (createfk)
                            {
                                // no = DB.ExecuteQuery(sql.ToString(), null, Get_Trx());
                                no = DB.ExecuteQuery(sql.ToString(), null, Get_Trx(), false, true);
                                AddLog(0, null, Decimal.Parse(no.ToString()), sql.ToString());
                                if (no != -1)
                                {
                                    log.Finer(ConstraintName + " - " + TableName + "." + ColumnName);
                                    returnMessage = sql.ToString();
                                }
                                else
                                {
                                    log.Info(ConstraintName + " - " + TableName + "." + ColumnName
                                             + " - ReturnCode=" + no);
                                    returnMessage = "FAILED:" + sql.ToString();
                                }
                            } //if createfk
                        }
                        catch (Exception e)
                        {
                            log.Log(Level.SEVERE, sql.ToString() + " - " + e.ToString());
                        }
                    } // modified
                }       //	rs.next
                else
                {
                    if (constraintNameDB != null && constraintNameDB.Equals("FK" + column.GetAD_Table_ID() + "_" + p_AD_Column_ID, StringComparison.OrdinalIgnoreCase))
                    {
                        dropsql = "ALTER TABLE " + table.GetTableName()
                                  + " DROP CONSTRAINT " + constraintNameDB;

                        /* Drop the existing constraint */
                        no = DB.ExecuteQuery(dropsql, null, Get_Trx());
                        AddLog(0, null, Decimal.Parse(no.ToString()), dropsql);
                        returnMessage = dropsql.ToString();
                    }
                }
            }
            catch (Exception e)
            {
                log.Log(Level.SEVERE, fk, e);
            }
            return(returnMessage);
        }
Example #22
0
        private DatabaseMetaData GetDatabaseMetaData(SqlConnection activeConnection, string dbname)
        {
            DatabaseMetaData databaseMetaData = new DatabaseMetaData();

            SqlCommand cmd = activeConnection.CreateCommand();

            cmd.CommandText = "sp_helpdb";
            cmd.Parameters.Add("@dbname", SqlDbType.NVarChar).Value = dbname;
            cmd.CommandType = CommandType.StoredProcedure;
            DataSet        dataset = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);

            adapter.Fill(dataset);
            adapter.Dispose();
            cmd.Dispose();

            if (dataset.Tables != null && dataset.Tables.Count == 2)
            {
                DataRow primaryinfo = dataset.Tables[0].Rows[0];
                string  metrics     = string.Empty;
                databaseMetaData.DBSize        = DbSizeStringToLong(dataset.Tables[0].Rows[0], "db_size", out metrics);
                databaseMetaData.MetricsDBSize = metrics;
                DataTable dbfileinfos = dataset.Tables[1];

                foreach (DataRow dbfi in dbfileinfos.Rows)
                {
                    // if database file
                    if (Convert.ToInt32(dbfi["fileid"]) == 0)
                    {
                        string metricsMaxSize;
                        databaseMetaData.DBMaxSize               = DbSizeStringToLong(dbfi, "maxsize", out metricsMaxSize);
                        databaseMetaData.MetricsDBMaxSize        = metricsMaxSize;
                        databaseMetaData.DbFileSizePercentGrowth = GetInt32FromString(Convert.ToString(dbfi["growth"]));
                    }

                    // if log file
                    if (Convert.ToInt32(dbfi["fileid"]) == 1)
                    {
                        //System.Windows.Forms.MessageBox.Show(Convert.ToString(dbfi["size"]), "Debug");
                        string metricsMaxSize;
                        databaseMetaData.LogMaxSize               = DbSizeStringToLong(dbfi, "maxsize", out metricsMaxSize);
                        databaseMetaData.MetricsLogMaxSize        = metricsMaxSize;
                        databaseMetaData.LogFileSizePercentGrowth = GetInt32FromString(Convert.ToString(dbfi["growth"]));
                    }
                }
            }

            cmd             = activeConnection.CreateCommand();
            cmd.CommandText = "declare @tblSqlPerfLogspace table" +
                              "(" +
                              "dbname nvarchar(max)," +
                              "mb_logsize float," +
                              "percent_logspace_used float," +
                              "[status] int" +
                              ");" +
                              "insert into @tblSqlPerfLogspace exec('dbcc sqlperf (logspace)');" +
                              "select * from @tblSqlPerfLogspace where[dbname] = @dbname;";

            cmd.Parameters.Add("@dbname", SqlDbType.NVarChar).Value = dbname;
            DataTable datatable = new DataTable();

            adapter = new SqlDataAdapter(cmd);
            adapter.Fill(datatable);
            adapter.Dispose();
            cmd.Dispose();

            if (datatable.Rows != null && datatable.Rows.Count > 0)
            {
                databaseMetaData.LogSize                = Convert.ToDouble(datatable.Rows[0]["mb_logsize"]);
                databaseMetaData.MetricsLogSize         = "MB";
                databaseMetaData.LogFileSizePercentUsed = Convert.ToInt32(datatable.Rows[0]["percent_logspace_used"]);
            }

            return(databaseMetaData);
        }
Example #23
0
        private void AddTablesNode(TreeNode rootNode)
        {
            var schemas = Database.Dmvs.Schemas.ToDictionary(x => x.schema_id);

            var tablesWithRowCount = (from table in Database.Dmvs.Tables.Where(x => !x.IsMSShipped)
                                      join partition in Database.Dmvs.Partitions on table.ObjectID equals partition.ObjectID
                                      where partition.IndexID < 2
                                      group partition by new { Name = $"{schemas[table.SchemaID].name}.{table.Name}", table.ObjectID }
                                      into g
                                      orderby g.Key.Name
                                      select new { g.Key.Name, g.Key.ObjectID, RowCount = g.Sum(x => x.Rows) }).ToArray();


            if (tablesWithRowCount.Length == 0)
            {
                return;
            }

            var tableRootNode = rootNode.Nodes.Add("Tables");

            foreach (var t in tablesWithRowCount)
            {
                var tableNode = tableRootNode.Nodes.Add(t.Name);
                //tableNode.ToolTipText = $"{t.RowCount} rows";
                tableNode.Tag = t.RowCount;

                tableNode.ContextMenu = tableMenu;

                // Add columns
                var tableColumnsNode = tableNode.Nodes.Add("Columns");
                var columns          = Database.Dmvs.Columns
                                       .Where(c => c.ObjectID == t.ObjectID)
                                       .ToArray();

                foreach (var c in columns)
                {
                    var mainColumn = Database.Dmvs.Columns.Single(x => x.ColumnID == c.ColumnID && x.ObjectID == c.ObjectID);

                    var typeName = DatabaseMetaData.GetColumnTypeName(Database.Dmvs, mainColumn);

                    tableColumnsNode.Nodes.Add($"{c.Name} ({typeName})");
                }

                // Add indexes
                var tableIndexesNode = tableNode.Nodes.Add("Indexes");
                var indexes          = Database.Dmvs.Indexes
                                       .Where(i => i.ObjectID == t.ObjectID && i.IndexID > 0)
                                       .OrderBy(i => i.Name);

                foreach (var i in indexes)
                {
                    var indexNode = tableIndexesNode.Nodes.Add(i.Name);

                    // Add index columns
                    var indexColumns = Database.Dmvs.IndexColumns
                                       .Where(ic => ic.ObjectID == t.ObjectID && ic.IndexID == i.IndexID);

                    foreach (var ic in indexColumns)
                    {
                        var tableColumn = columns.Single(c => c.ColumnID == ic.ColumnID);
                        var typeName    = DatabaseMetaData.GetColumnTypeName(Database.Dmvs, tableColumn);

                        indexNode.Nodes.Add($"{tableColumn.Name} ({typeName})");
                    }
                }
            }
        }
Example #24
0
        private void AddDataTypes(TreeNode typesNode)
        {
            var schemas = Database.Dmvs.Schemas.ToDictionary(x => x.schema_id);

            var types = Database.Dmvs.Types.Where(x => !x.IsTableType && x.IsUserDefined)
                        .Select(x => new { Name = $"{schemas[x.SchemaID].name}.{x.Name}", Description = DatabaseMetaData.GetTypeName(Database.Dmvs, x, true) })
                        .OrderBy(t => t.Name).ToArray();

            if (types.Length == 0)
            {
                return;
            }

            var tableNode = typesNode.Nodes.Add("User-Defined Data Types");

            foreach (var type in types)
            {
                /*var typeNode =*/ tableNode.Nodes.Add($"{type.Name} ({type.Description})");
                //typeNode.ContextMenu = dataTypeMenu;
            }
        }