예제 #1
0
        /// <summary>
        /// Initialize the set of global brokers
        /// </summary>

        public static void InitializeGlobalBrokers()
        {
            Array brokerList = Enum.GetValues(typeof(MetaBrokerType));
            int   maxBroker  = 0;
            bool  b;

            foreach (int enumValue in brokerList)
            {
                if (enumValue > maxBroker)
                {
                    maxBroker = enumValue;
                }
            }
            GlobalBrokers = new IMetaBroker[maxBroker + 1];
            foreach (int enumValue in brokerList)
            {
                if (enumValue == (int)MetaBrokerType.Unknown)
                {
                    continue;
                }
                GlobalBrokers[enumValue] = MetaBrokerUtil.Create((MetaBrokerType)enumValue);
                if (enumValue > maxBroker)
                {
                    maxBroker = enumValue;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Return true if this metatable maps to an Oracle source
        /// </summary>

        public static bool IsOracleMetatable(MetaTable mt)
        {
            bool isOracleTable = (MetaBrokerUtil.IsSqlMetaBroker(mt.MetaBrokerType) &&
                                  !IsOdbcMetatable(mt));

            return(isOracleTable);
        }
예제 #3
0
        /// <summary>
        /// Build the sql for a query
        /// </summary>
        /// <param name="eqp">ExecuteQueryParms</param>
        /// <returns>Sql for the query</returns>

        public override string BuildSql(
            ExecuteQueryParms eqp)
        {
            string     sql = "";
            MetaColumn mc;

            List <MetaBrokerType> MbTypes =            // metabrokers that can provide unpivoted assay data
                                            new List <MetaBrokerType>();

            MbTypes.Add(MetaBrokerType.Assay);

            Eqp   = eqp;
            Qt    = eqp.QueryTable;
            Exprs = FromClause = OrderBy = "";             // outer sql elements
            KeyMc = Mt.KeyMetaColumn;

            SelectList = new List <MetaColumn>();            // build list of selected metacolumns
            foreach (QueryColumn qc in Qt.QueryColumns)
            {
                mc = qc.MetaColumn;
                if (qc.Selected)
                {
                    SelectList.Add(mc);
                }
            }

            foreach (MetaBrokerType mbt in MbTypes)             // get Sql for each broker and union together
            {
                IMetaBroker mb = MetaBrokerUtil.Create(mbt);
                if (mb == null)
                {
                    throw new Exception("Unrecognized Metabroker: " + mbt);
                }
                string sql2 = mb.BuildUnpivotedAssayResultsSql(eqp);

                //if (actBinAQc != null)
                //  sql2 = Lex.Replace(sql2, "null activity_bin", ActivityBinSqlExpression + " activity_bin");

                if (Lex.IsDefined(sql))
                {
                    sql += " union all ";
                }
                sql += "/*** MetaBrokerType." + mbt.ToString() + " ***/ " + sql2;
            }

            sql = " select * from ( " + sql + " ) ";
            if (Qt.Alias != "")
            {
                sql += " " + Qt.Alias;
            }
            if (eqp.CallerSuppliedCriteria != "")
            {
                sql += " where " + eqp.CallerSuppliedCriteria;
            }

            return(sql);
        }
예제 #4
0
        /// <summary>
        /// Return true if all tables allow temp db tables to be used for key lists
        /// </summary>
        /// <param name="tables"></param>
        /// <returns></returns>

        bool AllowTempDbTableKeyListsForAllTables(
            List <QueryTable> tables)
        {
            if (DbCommandMx.DefaultKeyListPredType != KeyListPredTypeEnum.DbList)
            {
                return(false);
            }

            foreach (QueryTable qt in tables)
            {
                if (!MetaBrokerUtil.AllowTempDbTableKeyLists(qt))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #5
0
        /// <summary>
        /// Get the name of the SQL statement group that this table should be included in for the purposes of executing searches
        /// </summary>
        /// <param name="qt"></param>
        /// <returns></returns>

        public static string GetTableCriteriaGroupName(QueryTable qt)
        {
            MetaTable   mt        = null;
            IMetaBroker imb       = null;
            string      groupName = null;

            try
            {
                mt        = qt.MetaTable;
                imb       = MetaBrokerUtil.GetGlobalBroker(mt.MetaBrokerType);
                groupName = imb.GetTableCriteriaGroupName(qt).ToUpper();
                return(groupName);
            }
            catch (Exception ex)
            {
                DebugLog.Message(ex);
                return("");
            }
        }
예제 #6
0
/// <summary>
/// Gets a dictionary by MetaBrokerType of the assay metatables in a query that can be retrieved in an unpivoted form
/// </summary>
/// <param name="q"></param>

        Dictionary <MetaBrokerType, List <MetaTable> > GetUnpivotedAssayMetaTables
            (Query q)
        {
            QueryTable qt;
            MetaTable  mt;
            int        qti;

            Dictionary <MetaBrokerType, List <MetaTable> > dict = new Dictionary <MetaBrokerType, List <MetaTable> >();

            for (qti = 0; qti < q.Tables.Count; qti++)
            {
                qt = Query.Tables[qti];
                mt = qt.MetaTable;

                MetaBrokerType mbt = mt.MetaBrokerType;
                IMetaBroker    mb  = MetaBrokerUtil.GetGlobalBroker(mbt);
                if (mb == null)
                {
                    continue;
                }

                if (!mb.CanBuildUnpivotedAssayResultsSql)
                {
                    continue;
                }

                if (!dict.ContainsKey(mbt))
                {
                    dict[mbt] = new List <MetaTable>();
                }

                dict[mbt].Add(mt);
            }

            return(dict);
        }
예제 #7
0
        /// <summary>
        /// Return true if this metatable maps to a non-SQL source
        /// </summary>

        public static bool IsNonSqlMetaTable(MetaTable mt)
        {
            return(MetaBrokerUtil.IsNonSqlMetaBroker(mt.MetaBrokerType));
        }