QNode ComposePkCondition(DataTable t) { var pkCondition = new QGroupNode(QGroupType.And); foreach (DataColumn col in t.PrimaryKey) { pkCondition.Nodes.Add( (QField)col.ColumnName == new QVar(col.ColumnName + OriginalSuffix).Set(null)); } return(pkCondition); }
protected override string BuildGroup(QGroupNode node) { var grp = base.BuildGroup(node); if (!String.IsNullOrEmpty(node.Name)) { return(String.Format("(<{0}> {1})", node.Name, grp)); } else { return(grp); } }
protected QGroupNode ComposeGroupNode(QNode node1, QNode node2, QGroupType groupType) { QGroupNode group1 = node1 as QGroupNode, group2 = node2 as QGroupNode; if (group1 != null && group1.GroupType != groupType) { group1 = null; } if (group2 != null && group2.GroupType != groupType) { group2 = null; } // don't corrupt named groups if (group1 != null && group1.Name != null || group2 != null && group2.Name != null) { group1 = group2 = null; } if (group1 == null) { if (group2 == null) { QGroupNode group = new QGroupNode(groupType); group.Nodes.Add(node1); group.Nodes.Add(node2); return(group); } else { group2.Nodes.Insert(0, node1); return(group2); } } else { if (group2 == null) { group1.Nodes.Add(node2); } else { foreach (QNode qn in group2.Nodes) { group1.Nodes.Add(qn); } } return(group1); } }
private void ApplyArguments(Query q, IDictionary <string, object> args) { var grpAnd = QGroupNode.And(); var applyConditions = false; foreach (var arg in args) { if (arg.Value != null) { grpAnd.Nodes.Add( (QField)arg.Key == new QConst(arg.Value) ); applyConditions = true; } } if (applyConditions) { q.Condition = grpAnd; } }
protected QNode ParseConditionGroup(string input, int startIdx, out int endIdx) { int nextEndIdx; LexemType lexemType = GetLexemType(input, startIdx, out nextEndIdx); string lexem = GetLexem(input, startIdx, nextEndIdx); QNode node; if (lexemType == LexemType.Delimiter && lexem == "(") { string nodeName = ParseNodeName(input, nextEndIdx, out endIdx); nextEndIdx = endIdx; // check for empty group lexemType = GetLexemType(input, nextEndIdx, out endIdx); if (lexemType == LexemType.Delimiter && GetLexem(input, nextEndIdx, endIdx) == ")") { node = null; // push back endIdx = nextEndIdx; } else { node = ParseConditionGroup(input, nextEndIdx, out endIdx); } if (nodeName != null) { if (node == null) { node = new QGroupNode(QGroupType.And); } if (node is QNode) { ((QNode)node).Name = nodeName; } } // read ')' lexemType = GetLexemType(input, endIdx, out nextEndIdx); if (lexemType != LexemType.Delimiter || GetLexem(input, endIdx, nextEndIdx) != ")") { throw new RelexParseException( String.Format("Invalid syntax (position: {0}, expression: {1})", endIdx, input)); } endIdx = nextEndIdx; } else { node = ParseCondition(input, startIdx, out nextEndIdx); endIdx = nextEndIdx; } // check for group lexemType = GetLexemType(input, endIdx, out nextEndIdx); QGroupType groupType = QGroupType.And; if (GetGroupType(lexemType, input, endIdx, ref nextEndIdx, ref groupType)) { return(ComposeGroupNode(node, ParseConditionGroup(input, nextEndIdx, out endIdx), groupType)); } return(node); }