public bool TryGetStoredProcedure(IContext context, ICriterion criterion, ModelActionOption option, SqlConnection connection, string hash, out Discovery.SqlStoredProcedure storedProcedure) { bool b = false; storedProcedure = null; string s = String.Empty; if (!IsCacheLoaded(connection)) { LoadCache(connection); } List <Discovery.SqlStoredProcedure> list = StoredProcedures[connection.ConnectionString]; if (list != null && list.Count > 0) { Discovery.SqlStoredProcedure found = null; if (option == ModelActionOption.Post | option == ModelActionOption.Put) { found = list.FirstOrDefault(x => { bool b1 = false; if (!String.IsNullOrEmpty(x.Hash) && x.Hash.Length >= hash.Length) { b1 = hash.Equals(x.Hash.Substring(0, hash.Length), StringComparison.OrdinalIgnoreCase); } return(b1); }); } else { found = list.FirstOrDefault(x => { return(!String.IsNullOrEmpty(x.Hash) && x.Hash.Equals(hash, StringComparison.OrdinalIgnoreCase)); }); } if (found != null) { storedProcedure = found; b = true; } } return(b); }
private void LoadCache(SqlConnection connection) { if (Tables == null) { Tables = new Dictionary <string, List <Discovery.SqlTable> >(); } List <string> Schemas = new List <string>(); int tableschemasize = 3; List <XF.Common.Discovery.SqlTable> tables = new List <Discovery.SqlTable>(); using (SqlCommand cmd = connection.CreateCommand()) { cmd.CommandType = CommandType.Text; cmd.CommandText = DiscoveryResources.Discovery_Tables; using (SqlDataReader reader = cmd.ExecuteReader()) { tables.Add(new XF.Common.Discovery.SqlTable(reader)); while (reader.NextResult()) { tables.Add(new XF.Common.Discovery.SqlTable(reader)); } } } foreach (var table in tables) { if (!Schemas.Contains(table.TableSchema)) { Schemas.Add(table.TableSchema); } } foreach (var item in tables) { int j = item.TableSchema.Length; if (j > tableschemasize) { tableschemasize = j; } } Tables.Add(connection.ConnectionString, tables); if (StoredProcedures == null) { StoredProcedures = new Dictionary <string, List <Discovery.SqlStoredProcedure> >(); } string sql = DiscoveryResources.Discovery_StoredProcedures; List <Discovery.SqlParameter> list = new List <Discovery.SqlParameter>(); using (DbCommand cmd = connection.CreateCommand()) { cmd.CommandText = sql; cmd.CommandType = CommandType.Text; using (IDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { list.Add(new Discovery.SqlParameter(reader)); } } } Dictionary <string, List <Discovery.SqlParameter> > d = new Dictionary <string, List <Discovery.SqlParameter> >(); foreach (var item in list) { if (!d.ContainsKey(item.StoredProcedureName)) { d.Add(item.StoredProcedureName, new List <Discovery.SqlParameter>()); } d[item.StoredProcedureName].Add(item); } List <Discovery.SqlStoredProcedure> l = new List <Discovery.SqlStoredProcedure>(); foreach (var item in d) { Discovery.SqlStoredProcedure sproc = new Discovery.SqlStoredProcedure(item.Value); if (sproc.IsModelAction) { l.Add(sproc); } } StoredProcedures.Add(connection.ConnectionString, l); }
public bool TryGetStoredProcedure <T>(IContext context, ICriterion criterion, ModelActionOption option, SqlConnection connection, out Discovery.SqlStoredProcedure storedProcedure) where T : class, new() { string hash = ComposeHash <T>(context.ApplicationContextKey, criterion, option); return(TryGetStoredProcedure(context, criterion, option, connection, hash, out storedProcedure)); }