public IDNode(string _id) { this.ID = _id; this.right = null; this.left = null; }
/// <summary> /// READ - read proxy given a model /// </summary> public static TProxy Read <TProxy>(IDNode node) where TProxy : class { TProxy tProxy = default(TProxy); switch (typeof(TProxy).Name) // alphabetized list { case "ActionProxy": // action { ActionModel model = (ActionModel)node; { DataContext db = model.Connection._db; Table <ActionProxy> table = db.GetTable <ActionProxy>(); var query = from row in table where row.ActionID == model.ActionID select row; tProxy = query.First() as TProxy; } //{ // string query = $"SELECT ActionID, ActionTypeID, SystemActionTypeID, Name, TimeSpent, DateStarted, IsVisibleOnPortal, IsKnowledgeBase, ImportID, DateCreated, DateModified, CreatorID, ModifierID, TicketID, Description, SalesForceID, DateModifiedBySalesForceSync, Pinned, ImportFileID FROM Actions WHERE ActionID={model.ActionID}"; // DataRow row = model.Connection.GetRowCollection(query)[0]; // tProxy = new ActionProxy(row) as TProxy; //} } break; case "ActionProxy[]": // ticket actions { TicketModel ticket = (TicketModel)node; string query = $"SELECT * FROM Actions WHERE ActionID={ticket.TicketID}"; tProxy = ticket.ExecuteQuery <ActionProxy>(query).ToArray() as TProxy; } break; case "AttachmentProxy": // read all attachment types tProxy = ReadRefTypeProxy <TProxy>(node.Connection, (node as AttachmentModel).AttachmentID); break; case "AttachmentProxy[]": switch (node) { case ActionModel model: // action attachments Table <AttachmentProxy> table = node.Connection._db.GetTable <AttachmentProxy>(); tProxy = table.Where(a => a.RefID == model.ActionID && a.RefType == AttachmentProxy.References.Actions).ToArray() as TProxy; break; case null: default: if (Debugger.IsAttached) { Debugger.Break(); } break; } break; case "ReminderProxy": { TicketReminderModel reminder = (TicketReminderModel)node; string query = $"SELECT * FROM Reminders WHERE ReminderID = {reminder.ReminderID} AND RefType=17"; tProxy = reminder.ExecuteQuery <ReminderProxy>(query).ToArray() as TProxy; } break; case "SubscriptionModel[]": { TicketModel ticket = (TicketModel)node; string query = $"SELECT * FROM Subscriptions WHERE Reftype = 17 and RefID = {ticket.TicketID} and MarkDeleted = 0"; tProxy = ticket.ExecuteQuery <SubscriptionModel>(query).ToArray() as TProxy; } break; case "TaskAssociationProxy": { TaskAssociationModel taskAssociation = (TaskAssociationModel)node; string query = String.Empty; // = $"SELECT TaskID, RefID, RefType,CreatorID, DateCreated FROM TaskAssociations WHERE TaskID = {model.TaskID} AND RefID = {model.Ticket.TicketID} AND RefType = 17"; tProxy = taskAssociation.ExecuteQuery <TaskAssociationProxy>(query).First() as TProxy; } break; case "TagLinkProxy[]": { TicketModel ticket = (TicketModel)node; //string query = $"SELECT * FROM TagLinks WHERE RefType = 17 AND RefID = {ticket.TicketID}"; //tProxy = ticket.ExecuteQuery<TProxy>(query).ToArray() as TProxy; Table <TagLinkProxy> table = ticket.Connection._db.GetTable <TagLinkProxy>(); tProxy = table.Where(t => (t.RefType == ReferenceType.Tickets) && (t.RefID == ticket.TicketID)).ToArray() as TProxy; } break; case "TicketProxy": // ticket { TicketModel model = (TicketModel)node; DataContext db = model.Connection._db; Table <TicketProxy> table = db.GetTable <TicketProxy>(); var query = from row in table where row.TicketID == model.TicketID select row; tProxy = query.First() as TProxy; } break; case "TicketRelationshipProxy[]": { TicketModel model = (TicketModel)node; //string query = $"SELECT * FROM TicketRelationships WHERE Ticket1ID={model.TicketID} OR Ticket2ID={model.TicketID}"; string query = $"SELECT * FROM TicketRelationships WHERE Ticket1ID={model.TicketID} OR Ticket2ID={model.TicketID}"; tProxy = model.ExecuteQuery <TicketRelationshipProxy>(query).ToArray() as TProxy; } break; case "UserProxy": { UserModel user = (UserModel)node; string query = $"SELECT * FROM Users WHERE UserID={user.UserID}"; tProxy = node.ExecuteQuery <UserProxy>(query).First() as TProxy; } break; default: if (Debugger.IsAttached) { Debugger.Break(); } break; } return(tProxy); }
/// <summary> /// CREATE - create proxy child for model parent /// </summary> public static IDNode Create <TProxy>(IDNode idNode, TProxy tProxy) where TProxy : class { IDNode result = null; if (TryCreateAttachment(idNode as IAttachmentDestination, tProxy as AttachmentProxy, out result)) { return(result); } string modification = $", CreatorID={idNode.Connection.UserID}, DateCreated={UpdateArguments.ToSql(DateTime.UtcNow)}"; string now = UpdateArguments.ToSql(DateTime.UtcNow); int creatorID = idNode.Connection.UserID; string command = String.Empty; switch (tProxy) // alphabetized list { case ActionProxy proxy: { TicketModel model = (TicketModel)idNode; proxy.TicketID = model.TicketID; proxy.CreatorID = proxy.ModifierID = model.Connection.UserID; proxy.DateCreated = proxy.DateModified = DateTime.UtcNow; // 1. sql command //command = proxy.InsertCommandText(); //SqlCommand sqlCommand = new SqlCommand(command, model.Connection._connection); //int id = Decimal.ToInt32((decimal)sqlCommand.ExecuteScalar()); //result = new ActionModel(model, id); // how to bypass Verify? // 2. linq DataContext db = model.Connection._db; Table <ActionProxy> table = db.GetTable <ActionProxy>(); table.InsertOnSubmit(proxy); db.SubmitChanges(); // 3. TeamSupport.Data //proxy.ActionID = NewAction(model, proxy); result = new ActionModel(model, proxy.ActionID); // how to bypass Verify? } break; case ContactProxy proxy: { TicketModel model = (TicketModel)idNode; command = $"INSERT INTO UserTickets (TicketID, UserID, DateCreated, CreatorID)" + $"SELECT {model.TicketID}, {proxy.UserID}, '{now}', {creatorID} "; } break; case CustomerProxy proxy: { TicketModel model = (TicketModel)idNode; command = $"INSERT INTO OrganizationTickets (TicketID, OrganizationID, DateCreated, CreatorID, DateModified, ModifierID)" + $"SELECT {model.TicketID}, {proxy.OrganizationID}, '{now}', {creatorID}, '{now}', {creatorID}"; } break; case SubscriptionProxy proxy: { TicketModel model = (TicketModel)idNode; command = $"INSERT INTO Subscriptions (RefType, RefID, UserID, DateCreated, DateModified, CreatorID, ModifierID)" + $"SELECT 17, {model.TicketID}, {proxy.UserID}, '{now}','{now}', {creatorID}, {creatorID} "; } break; case TicketProxy proxy: { UserModel model = (UserModel)idNode; proxy.OrganizationID = model.Organization.OrganizationID; proxy.CreatorID = proxy.ModifierID = model.UserID; proxy.UserID = model.Connection.UserID; proxy.DateCreated = proxy.DateModified = DateTime.UtcNow; proxy.TicketNumber = 1 + model.ExecuteQuery <int>($"SELECT MAX(TicketNumber) FROM Tickets WHERE OrganizationID={model.Organization.OrganizationID}").Max(); // 1. sql command //command = proxy.InsertCommandText(proxy.TicketNumber); //SqlCommand sqlCommand = new SqlCommand(command, model.Connection._connection); //int id = Decimal.ToInt32((decimal)sqlCommand.ExecuteScalar()); //result = new TicketModel(model.Organization, id); // how to bypass Verify? // 2. linq DataContext db = model.Organization.Connection._db; Table <TicketProxy> table = db.GetTable <TicketProxy>(); table.InsertOnSubmit(proxy); db.SubmitChanges(); // 3. TeamSupport.Data //proxy.TicketID = NewTicket(model, proxy); result = new TicketModel(model.Organization, proxy.TicketID); // how to bypass Verify? - move to UserModel? } break; case null: default: if (Debugger.IsAttached) { Debugger.Break(); } break; } //if (!String.IsNullOrEmpty(command)) // idNode.ExecuteCommand(command); // TODO - log return(result); }
public VariableNotDeclaredException(IDNode node, string message) : base(message) { Node = node; }
private static bool TryCreateAttachment(IAttachmentDestination attachedTo, AttachmentProxy tProxy, out IDNode result) { if ((attachedTo == null) || (tProxy == null)) { result = null; return(false); } IDNode idNode = attachedTo as IDNode; tProxy.DateCreated = tProxy.DateModified = DateTime.UtcNow; tProxy.CreatorID = tProxy.ModifierID = idNode.Connection.UserID; tProxy.OrganizationID = idNode.Connection.OrganizationID; switch (tProxy) // alphabetized list { case ActionAttachmentProxy proxy: // create action attachment proxy.RefID = (idNode as ActionModel).ActionID; break; case AssetAttachmentProxy proxy: // create asset attachment proxy.RefID = (idNode as AssetModel).AssetID; break; case ChatAttachmentProxy proxy: // create asset attachment proxy.RefID = (idNode as ChatModel).ChatID; break; case CompanyActivityAttachmentProxy proxy: proxy.RefID = (idNode as NoteModel).NoteID; break; case ContactActivityAttachmentProxy proxy: proxy.RefID = (idNode as NoteModel).NoteID; break; case OrganizationAttachmentProxy proxy: proxy.RefID = (idNode as OrganizationModel).OrganizationID; break; case ProductVersionAttachmentProxy proxy: proxy.RefID = (idNode as ProductVersionModel).ProductVersionID; break; case TaskAttachmentProxy proxy: proxy.RefID = (idNode as TaskModel).TaskID; break; case UserAttachmentProxy proxy: // create action attachment proxy.RefID = (idNode as UserModel).UserID; break; case UserPhotoAttachmentProxy proxy: // create action attachment proxy.RefID = (idNode as UserModel).UserID; break; case WatercoolerMsgAttachmentProxy proxy: // create action attachment proxy.RefID = (idNode as WatercoolerMsgModel).MessageID; break; case null: default: if (Debugger.IsAttached) { Debugger.Break(); } break; } Table <AttachmentProxy> table = idNode.Connection._db.GetTable <AttachmentProxy>(); table.InsertOnSubmit(tProxy); idNode.Connection._db.SubmitChanges(); result = new AttachmentModel(attachedTo, tProxy.AttachmentID); // disable Verify? return(true); }
private void CheckExistVars(CommonTree node, string methodName) { dynamic left = node.GetChild(0); dynamic right = node.GetChild(1); if (left is IDNode) { var temp = left as IDNode; VarType type = Context.SearchVar(temp.GetChild(0).Text, methodName); if (type == VarType.Undefined) { Console.WriteLine("Использование неопределенной переменной {0}. Строка {1}", temp.VarName, node.Line); } else { AddID(temp, methodName); } } if (left is ArrayInitNode) { IDNode temp = left.GetChild(0); VarType type = Context.SearchVar(temp.GetChild(0).Text, methodName); if (type == VarType.Undefined) { Console.WriteLine("Использование неопределенной переменной {0}. Строка {1}", temp.VarName, node.Line); } else { AddID(temp, methodName); Parsing(left.GetChild(1) as dynamic, methodName); } } if (right is IDNode) { var temp = right as IDNode; VarType type = Context.SearchVar(temp.GetChild(0).Text, methodName); if (type == VarType.Undefined) { Console.WriteLine("Использование неопределенной переменной {0}. Строка {1}", temp.VarName, node.Line); } else { AddID(temp, methodName); } } if (right is ArrayInitNode) { IDNode temp = right.GetChild(0); VarType type = Context.SearchVar(temp.GetChild(0).Text, methodName); if (type == VarType.Undefined) { Console.WriteLine("Использование неопределенной переменной {0}. Строка {1}", temp.VarName, node.Line); } else { AddID(temp, methodName); Parsing(right.GetChild(1) as dynamic, methodName); } } }
public void Init(ParsingContext context, ParseTreeNode parseNode) { if (parseNode.ChildNodes[0].Token != null) { if (parseNode.ChildNodes[0].Token.Text == SonesGQLConstants.ASTERISKSYMBOL) { SelType = TypesOfSelect.Asterisk; } else { throw new NotImplementedQLException(parseNode.ChildNodes[0].Token.Text); } } else if (parseNode.ChildNodes[0].AstNode is SelByTypeNode) { TypeName = ((SelByTypeNode)parseNode.ChildNodes[0].AstNode).TypeName; } else { #region IDNode or AggregateNode SelType = TypesOfSelect.None; object astNode = parseNode.ChildNodes[0].AstNode; if (astNode == null) { // why the hack are functions without a caller in the child/child? if ((parseNode.ChildNodes[0].ChildNodes != null && parseNode.ChildNodes[0].ChildNodes.Count > 0) && parseNode.ChildNodes[0].ChildNodes[0].AstNode != null) { astNode = parseNode.ChildNodes[0].ChildNodes[0].AstNode; } else { if (parseNode.ChildNodes[0].ChildNodes != null && parseNode.ChildNodes[0].ChildNodes.Count > 0) { throw new ArgumentException("This is not a valid IDNode: " + (parseNode.ChildNodes[0].ChildNodes.Aggregate("", (result, elem) => { result += elem.Token.Text + "."; return(result); }))); } else { throw new ArgumentException("Found an invalid IDNode"); } } } if (astNode is IDNode) { IDNode aIDNode = astNode as IDNode; #region ID TypeOfColumnSource = TypesOfColumnSource.ID; #region get value ColumnSourceValue = ((IDNode)aIDNode).IDChainDefinition; #endregion #region Alias handling if (HasChildNodes(parseNode.ChildNodes[1])) // && parseNode.ChildNodes.Last().AstNode is AliasNode) { AliasId = parseNode.ChildNodes[1].ChildNodes[1].Token.ValueString; //(parseNode.ChildNodes.Last().AstNode as AliasNode).AliasId; } #endregion #endregion } else if (astNode is AggregateNode) { #region aggregate TypeOfColumnSource = TypesOfColumnSource.Aggregate; AggregateNode aAggregateNode = (AggregateNode)astNode; ColumnSourceValue = aAggregateNode.AggregateDefinition; #endregion #region Alias handling if (HasChildNodes(parseNode.ChildNodes[1])) //Last().AstNode is AliasNode) { AliasId = parseNode.ChildNodes[1].ChildNodes[1].Token.ValueString; //(parseNode.ChildNodes.Last().AstNode as AliasNode).AliasId; } else { AliasId = aAggregateNode.FuncDefinition.SourceParsedString; } #endregion } else { throw new NotImplementedQLException(parseNode.ChildNodes[0].AstNode.GetType().Name); } #endregion } }
// --- Values --- public override void Visit(IDNode node) { Emit(node.ID + ""); }
private void AddID(IDNode node, string methodName) { ITree newNode = new CommonTree(new CommonToken(1, Context.GetID(node.VarName, methodName).ToString())); node.AddChild(newNode); }
public void Init(ParsingContext context, ParseTreeNode myParseTreeNode) { var _GraphQLGrammar = (SonesGQLGrammar)context.Language.Grammar; _Targets = new HashSet <AAttributeAssignOrUpdateOrRemove>(); #region FROM Sources _SourceType = ((ATypeNode)myParseTreeNode.ChildNodes[1].AstNode).ReferenceAndType.TypeName; var typeNode = _SourceType; _Sources = (myParseTreeNode.ChildNodes[2].AstNode as TupleNode).TupleDefinition; if (_Sources.Count() > 1) { var firstElement = (BinaryExpressionDefinition)_Sources.First().Value; _Sources.Remove(_Sources.First()); _Condition = GetConditionNode("OR", firstElement, _Sources); } else { _Condition = (BinaryExpressionDefinition)_Sources.First().Value; } #endregion #region Find statement "VIA Edge" IDNode _EdgeAttr = null; // Semantic Web Yoda-style... if (myParseTreeNode.ChildNodes[3].Token.KeyTerm == _GraphQLGrammar.S_VIA) { _EdgeAttr = (myParseTreeNode.ChildNodes[4].AstNode as IDNode); } else // Human language style... { if (myParseTreeNode.ChildNodes[5].Token.KeyTerm == _GraphQLGrammar.S_VIA) { _EdgeAttr = (myParseTreeNode.ChildNodes[6].AstNode as IDNode); } } #endregion #region Find statement "TO Targets" TupleDefinition tupleDef = null; // Semantic Web Yoda-style... if (myParseTreeNode.ChildNodes[5].Token.KeyTerm == _GraphQLGrammar.S_TO) { typeNode = ((ATypeNode)myParseTreeNode.ChildNodes[6].ChildNodes[0].AstNode).ReferenceAndType.TypeName; tupleDef = (myParseTreeNode.ChildNodes[6].ChildNodes[1].AstNode as TupleNode).TupleDefinition; } else // Human language style... { if (myParseTreeNode.ChildNodes[3].Token.KeyTerm == _GraphQLGrammar.S_TO) { typeNode = ((ATypeNode)myParseTreeNode.ChildNodes[4].ChildNodes[0].AstNode).ReferenceAndType.TypeName; tupleDef = (myParseTreeNode.ChildNodes[4].ChildNodes[1].AstNode as TupleNode).TupleDefinition; } } #endregion #region Processing... var tupleDefTargetType = new TupleDefinition(tupleDef.KindOfTuple); foreach (var item in tupleDef.TupleElements) { var attrName = typeNode + SonesGQLConstants.EdgeTraversalDelimiterSymbol + ((IDChainDefinition)((BinaryExpressionDefinition)item.Value).Left).ContentString; var leftNode = new IDChainDefinition(attrName, new List <TypeReferenceDefinition>() { new TypeReferenceDefinition(typeNode, typeNode) }); leftNode.AddPart(new ChainPartTypeOrAttributeDefinition(((IDChainDefinition)((BinaryExpressionDefinition)item.Value).Left).ContentString)); var rightNode = ((BinaryExpressionDefinition)item.Value).Right; var binExpression = new BinaryExpressionDefinition(((BinaryExpressionDefinition)item.Value).OperatorSymbol, leftNode, rightNode); tupleDefTargetType.AddElement(new TupleElement(binExpression)); } _Targets.Add(new AttributeAssignOrUpdateList(new CollectionDefinition(CollectionType.Set, tupleDefTargetType), _EdgeAttr.IDChainDefinition, false)); #endregion }
public virtual void VisitIDNode(IDNode node) { }
private Node CreateNode(IDNode dnode) { bool exists = false; return(CreateNode(dnode, out exists)); }
public override void Visit(IDNode node) { Console.WriteLine(node.ID); }
public void Init(ParsingContext context, ParseTreeNode parseNode) { _Sources = new HashSet <AAttributeAssignOrUpdateOrRemove>(); #region VIA edge IDNode _EdgeAttr = null; if (parseNode.ChildNodes[4].AstNode is IDNode) //Semantic Web Yoda style { _EdgeAttr = (parseNode.ChildNodes[4].AstNode as IDNode); } else //Human language style { _EdgeAttr = (parseNode.ChildNodes[6].AstNode as IDNode); } #endregion #region sources var typeNode = ((ATypeNode)parseNode.ChildNodes[1].AstNode).ReferenceAndType.TypeName; var tupleDef = (parseNode.ChildNodes[2].AstNode as TupleNode).TupleDefinition; var tupleDefSourceType = new TupleDefinition(tupleDef.KindOfTuple); _TargetType = typeNode; foreach (var item in tupleDef.TupleElements) { var attrName = typeNode + SonesGQLConstants.EdgeTraversalDelimiterSymbol + ((IDChainDefinition)((BinaryExpressionDefinition)item.Value).Left).ContentString; var leftNode = new IDChainDefinition(attrName, new List <TypeReferenceDefinition>() { new TypeReferenceDefinition(typeNode, typeNode) }); leftNode.AddPart(new ChainPartTypeOrAttributeDefinition(((IDChainDefinition)((BinaryExpressionDefinition)item.Value).Left).ContentString)); var rightNode = ((BinaryExpressionDefinition)item.Value).Right; var binExpression = new BinaryExpressionDefinition(((BinaryExpressionDefinition)item.Value).OperatorSymbol, leftNode, rightNode); tupleDefSourceType.AddElement(new TupleElement(binExpression)); } _Sources.Add(new AttributeRemoveList(_EdgeAttr.IDChainDefinition, _EdgeAttr.IDChainDefinition.ContentString, tupleDefSourceType)); #endregion #region sources FROM if (parseNode.ChildNodes[6].ChildNodes[0].AstNode is ATypeNode) //Semantic Web Yoda style { typeNode = ((ATypeNode)parseNode.ChildNodes[6].ChildNodes[0].AstNode).ReferenceAndType.TypeName; _Targets = (parseNode.ChildNodes[6].ChildNodes[1].AstNode as TupleNode).TupleDefinition; } else //Human language style { typeNode = ((ATypeNode)parseNode.ChildNodes[4].ChildNodes[0].AstNode).ReferenceAndType.TypeName; _Targets = (parseNode.ChildNodes[4].ChildNodes[1].AstNode as TupleNode).TupleDefinition; } _SourceType = typeNode; if (_Targets.Count() > 1) { var firstElement = (BinaryExpressionDefinition)_Targets.First().Value; _Targets.Remove(_Targets.First()); _Condition = GetConditionNode("OR", firstElement, _Targets); } else { _Condition = (BinaryExpressionDefinition)_Targets.First().Value; } #endregion }