internal static void Init() { if (_initialised) { return; } Assembly asm = Assembly.GetAssembly(typeof(Mission)); Type[] alltypes = asm.GetTypes(); _asm = asm; _initialised = true; _actionTypes = new Dictionary <string, StatementObj>(); _conditionTypes = new Dictionary <string, StatementObj>(); _eventListenerTypes = new Dictionary <string, StatementObj>(); foreach (Type t in alltypes) { object[] target_attrs = t.GetCustomAttributes(typeof(StatementAttribute), false); if (target_attrs.Length == 0) { continue; } StatementAttribute statment_attr = target_attrs[0] as StatementAttribute; if (t.IsSubclassOf(typeof(Action))) { StatementObj so = new StatementObj(); so.className = statment_attr.className; so.type = t; so.recyclable = statment_attr.recyclable; _actionTypes.Add(so.className, so); } else if (t.IsSubclassOf(typeof(Condition))) { StatementObj so = new StatementObj(); so.className = statment_attr.className; so.type = t; so.recyclable = statment_attr.recyclable; _conditionTypes.Add(so.className, so); } else if (t.IsSubclassOf(typeof(EventListener))) { StatementObj so = new StatementObj(); so.className = statment_attr.className; so.type = t; so.recyclable = statment_attr.recyclable; _eventListenerTypes.Add(so.className, so); } } }
public override bool Parse(string sql, out List <StatementObj> statements) { statements = new List <StatementObj>(); try { TGSqlParser sqlparser = new TGSqlParser(TDbVendor.DbVMysql); sqlparser.SqlText.Text = sql; int ret = sqlparser.Parse(); if (ret != 0) { this.message = sqlparser.ErrorMessages; return(false); } foreach (var statement in sqlparser.SqlStatements) { StatementObj obj = new StatementObj(); obj.SqlText = statement.RawSqlText; switch (statement.SqlStatementType) { case TSqlStatementType.sstSelect: case TSqlStatementType.sstMySQLDescribe: case TSqlStatementType.sstMySQLShow: obj.SqlType = SqlType.eTable; break; default: obj.SqlType = SqlType.eMsg; break; } statements.Add(obj); } return(true); } catch (Exception ex) { this.message = ex.Message; LogHelper.Error(ex); return(false); } }