protected override void OnParsing(ref UpdateInfo info, UpdateStateMachine machine, TokenParsingEventArgs <UpdateParseStates> e) { const string CONTEXT_KEY_CONDITION = "Condition"; const string CONTEXT_KEY_SET = "Set"; switch (e.NowState) { case States.UpdateParseStates.SetField: { string field = machine.TokenStack.Pop().Text; SetInfo setInfo = new SetInfo(); setInfo.Field = field; setInfo.Parameter = field; machine.Context[CONTEXT_KEY_SET] = setInfo; info.SetFields.Add(setInfo); } break; case States.UpdateParseStates.SetParameter: { SetInfo setInfo = (SetInfo)machine.Context[CONTEXT_KEY_SET]; setInfo.Parameter = machine.TokenStack.Pop().Text; } break; case UpdateParseStates.Condition: { ConditionInfo condition = new ConditionInfo(); machine.Context[CONTEXT_KEY_CONDITION] = condition; info.Conditions.Add(condition); } break; case UpdateParseStates.NotCondition: { ConditionInfo condition = machine.Context[CONTEXT_KEY_CONDITION] as ConditionInfo; condition.IsNot = true; } break; case States.UpdateParseStates.ConditionField: { ConditionInfo condition = machine.Context[CONTEXT_KEY_CONDITION] as ConditionInfo; string field = machine.TokenStack.Pop().Text; condition.Field = field; condition.Parameter = field; } break; case States.UpdateParseStates.ConditionOperator: { string opr = machine.TokenStack.Pop().Text; ConditionInfo condition = machine.Context[CONTEXT_KEY_CONDITION] as ConditionInfo; condition.Operators = opr; } break; case States.UpdateParseStates.ConditionParameter: { ConditionInfo condition = machine.Context[CONTEXT_KEY_CONDITION] as ConditionInfo; condition.Parameter = machine.TokenStack.Pop().Text; } break; case States.UpdateParseStates.NextCondition: { var token = machine.TokenStack.Pop(); ConditionJoiners joiners = token.Action == Actions.UpdateParseActions.Or ? ConditionJoiners.Or : ConditionJoiners.And; var condition = (ConditionInfo)machine.Context[CONTEXT_KEY_CONDITION]; condition.JoinerToNext = joiners; condition = new ConditionInfo(); info.Conditions.Add(condition); machine.Context[CONTEXT_KEY_CONDITION] = condition; } break; case States.UpdateParseStates.WithoutField: { info.WithoutFields.Add(machine.TokenStack.Pop().Text); } break; case States.UpdateParseStates.NextWithoutField: case States.UpdateParseStates.SetEquals: case States.UpdateParseStates.NextSetField: case States.UpdateParseStates.Without: machine.TokenStack.Pop(); break; default: break; } }
protected override void OnParsing(ref CountInfo info, CountStateMachine machine, TokenParsingEventArgs <CountParseStates> e) { const string CONTEXT_KEY_CONDITION = "CONDITION"; switch (e.NowState) { case States.CountParseStates.Start: break; case States.CountParseStates.Condition: { ConditionInfo condition = new ConditionInfo(); info.ConditionInfos.Add(condition); machine.Context[CONTEXT_KEY_CONDITION] = condition; } break; case CountParseStates.NotCondition: { ConditionInfo conditionInfo = machine.Context[CONTEXT_KEY_CONDITION] as ConditionInfo; conditionInfo.IsNot = true; } break; case States.CountParseStates.ConditionField: { ConditionInfo conditionInfo = machine.Context[CONTEXT_KEY_CONDITION] as ConditionInfo; conditionInfo.Field = machine.TokenStack.Pop().Text; conditionInfo.Parameter = conditionInfo.Field; machine.Context[CONTEXT_KEY_CONDITION] = conditionInfo; } break; case States.CountParseStates.ConditionOperator: { ConditionInfo conditionInfo = machine.Context[CONTEXT_KEY_CONDITION] as ConditionInfo; conditionInfo.Operators = machine.TokenStack.Pop().Text; } break; case States.CountParseStates.ConditionParameter: { ConditionInfo conditionInfo = machine.Context[CONTEXT_KEY_CONDITION] as ConditionInfo; conditionInfo.Parameter = machine.TokenStack.Pop().Text; } break; case States.CountParseStates.NextCondition: { ConditionInfo conditionInfo = machine.Context[CONTEXT_KEY_CONDITION] as ConditionInfo; var token = machine.TokenStack.Pop(); conditionInfo.JoinerToNext = token.Action == Actions.CountParseActions.And ? ConditionJoiners.And : ConditionJoiners.Or; machine.Context[CONTEXT_KEY_CONDITION] = null; conditionInfo = new ConditionInfo(); machine.Context[CONTEXT_KEY_CONDITION] = conditionInfo; info.ConditionInfos.Add(conditionInfo); } break; case States.CountParseStates.End: break; default: break; } }
protected abstract void OnParsing(ref TCommandInfo info, TMachine machine, TokenParsingEventArgs <TStates> e);
private void Machine_Parsing(object sender, TokenParsingEventArgs <TStates> e) { TMachine machine = (TMachine)sender; this.OnParsing(ref this.result, machine, e); }
protected override void OnParsing(ref SelectInfo info, SelectStateMachine machine, TokenParsingEventArgs <SelectParseStates> e) { const string CONTEXT_KEY_CONDITION = "Condition"; const string CONTEXT_KEY_ORDER = "Order"; switch (e.NowState) { case SelectParseStates.OutputField: info.Fields.Add ( machine.TokenStack.Pop().Text ); break; case SelectParseStates.ConditionField: { ConditionInfo condition = (ConditionInfo)machine.Context[CONTEXT_KEY_CONDITION]; condition.Field = machine.TokenStack.Pop().Text; condition.Parameter = condition.Field; machine.Context[CONTEXT_KEY_CONDITION] = condition; } break; case SelectParseStates.ConditionOperator: { ConditionInfo condition = (ConditionInfo)machine.Context[CONTEXT_KEY_CONDITION]; condition.Operators = machine.TokenStack.Pop().Text; } break; case SelectParseStates.NextCondition: { ConditionInfo condition = (ConditionInfo)machine.Context[CONTEXT_KEY_CONDITION]; condition.JoinerToNext = machine.TokenStack.Pop().Action == Actions.SelectParseActions.Or ? ConditionJoiners.Or : ConditionJoiners.And; condition = new ConditionInfo(); info.Conditions.Add(condition); machine.Context[CONTEXT_KEY_CONDITION] = condition; } break; case SelectParseStates.ConditionParameter: { ConditionInfo condition = (ConditionInfo)machine.Context[CONTEXT_KEY_CONDITION]; condition.Parameter = machine.TokenStack.Pop().Text; } break; case SelectParseStates.OrderByField: { OrderInfo order = new OrderInfo(machine.TokenStack.Pop().Text); info.Orders.Add(order); machine.Context[CONTEXT_KEY_ORDER] = order; } break; case SelectParseStates.AscOrDesc: { OrderInfo order = (OrderInfo)machine.Context[CONTEXT_KEY_ORDER]; order.Type = machine.TokenStack.Pop().Text == SelectToken.TEXT_DESC ? OrderTypes.Desc : OrderTypes.Asc; } break; case SelectParseStates.NotCondition: { machine.TokenStack.Pop(); ConditionInfo condition = (ConditionInfo)machine.Context[CONTEXT_KEY_CONDITION]; condition.IsNot = true; } break; case SelectParseStates.Condition: { machine.TokenStack.Pop(); ConditionInfo condition = new ConditionInfo(); info.Conditions.Add(condition); machine.Context[CONTEXT_KEY_CONDITION] = condition; } break; case SelectParseStates.NextOutputField: case SelectParseStates.OrderBy: machine.TokenStack.Pop(); break; default: break; } }
protected override void OnParsing(ref InsertInfo info, InsertStateMachine machine, TokenParsingEventArgs <InsertParseStates> e) { switch (e.NowState) { case States.InsertParseStates.WithoutField: info.WithoutFields.Add(machine.TokenStack.Pop().Text); break; case States.InsertParseStates.Select: info.SelectNewRow = true; break; case States.InsertParseStates.Start: case States.InsertParseStates.Without: case States.InsertParseStates.WithoutEnd: default: break; } }