/// <summary> /// Look for routine defintiion in the database with "show create procedure" or information_schema. /// </summary> /// <param name="Name"></param> /// <param name="type"></param> /// <returns></returns> private RoutineInfo GetRoutineFromDb(string sName, RoutineInfoType type) { string sql; if (type == RoutineInfoType.Trigger) { // there is no such thing as "show create trigger" string[] fullName = sName.Split('.'); if (fullName.Length != 2) fullName = string.Format("{0}.{1}", _utilCon.Database, sName).Split('.'); sql = GetCreateTriggerFor( fullName[ 0 ], fullName[ 1 ] ); } else { sql = GetFieldAsString( string.Format("show create {0} {1}", type.ToString(), sName), 2); sql = sql.Replace("\r", string.Empty).Replace("\n", Environment.NewLine); } StringBuilder sb; CommonTokenStream cts; CommonTree t = (CommonTree)(ParseSql(sql, false, out sb, out cts).Tree); if (t.IsNil) { t = (CommonTree)t.GetChild(0); } return new RoutineInfo() { Name = RoutineInfo.GetRoutineName( sName ), ParsedTree = t, TokenStream = cts, SourceCode = sql, Type = type }; }
internal RoutineInfo LookupRoutine(string Name, RoutineInfoType type) { RoutineInfo routine = null; if (!_preinstrumentedRoutines.TryGetValue(Name, out routine)) { routine = GetRoutineFromDb(Name, type); RegisterRoutine(Name, routine); } return routine; }