/// <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; } } }
/// <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); }
/// <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); }
/// <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); }
/// <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(""); } }
/// <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); }
/// <summary> /// Return true if this metatable maps to a non-SQL source /// </summary> public static bool IsNonSqlMetaTable(MetaTable mt) { return(MetaBrokerUtil.IsNonSqlMetaBroker(mt.MetaBrokerType)); }