private NPathSelectQuery ParseSelectQuery() { NPathSelectQuery query = new NPathSelectQuery(); queries.Push(query); tokenizer.GetCurrentToken("select", "Select"); NPathSelectClause selectClause = new NPathSelectClause(); ParseSelectClause(selectClause); query.Select = selectClause; tokenizer.GetCurrentToken("from", "From"); NPathFromClause fromClause = new NPathFromClause(); ParseFromClause(fromClause); query.From = fromClause; if (tokenizer.GetCurrentToken().IsType("where")) { NPathWhereClause whereClause = new NPathWhereClause(); query.Where = whereClause; ParseWhereClause(whereClause); } if (tokenizer.GetCurrentToken().IsType("order by")) // do not localize { NPathOrderByClause orderByClause = new NPathOrderByClause(); ParseOrderByClause(orderByClause); query.OrderBy = orderByClause; } return query; }
private ArrayList GetNeglectedIdentityPropertyNames(NPathSelectClause select) { ArrayList idProperties = new ArrayList() ; foreach (IPropertyMap idProperty in this.rootClassMap.GetIdentityPropertyMaps()) { idProperties.Add(idProperty.Name.ToLower(CultureInfo.InvariantCulture)); } foreach (NPathSelectField field in select.SelectFields) { if (field.Expression is NPathIdentifier) { NPathIdentifier path = field.Expression as NPathIdentifier ; if (path.Path == "*" || path.Path == "¤") { return new ArrayList() ; } else { if (idProperties.Contains(path.Path.ToLower(CultureInfo.InvariantCulture))) { idProperties.Remove(path.Path.ToLower(CultureInfo.InvariantCulture)); } } } } return idProperties; }
public static NPathQueryType DeduceQueryType(NPathSelectClause select) { int cntPropPath = 0; int cntFnc = 0; int cntParenthesis = 0; int cntAlias = 0; foreach (NPathSelectField field in select.SelectFields) { if (field.Expression is NPathIdentifier) { cntPropPath++; } if (field.Alias != null && field.Alias.Length > 0) { cntAlias++; } if (field.Expression is NPathFunction) { cntFnc++; } if (field.Expression is NPathParenthesisGroup) { cntParenthesis++; } } if (select.SelectFields.Count == 1 && cntFnc == 1 && cntPropPath == 0) { return NPathQueryType.SelectScalar; } // if (cntFnc > 0 && cntPropPath > 0) // { // return NPathQueryType.SelectMixed; // } if (cntFnc > 1 || cntParenthesis > 0 || cntAlias > 0) { return NPathQueryType.SelectTable; } if (cntFnc == 0 && cntPropPath > 0) { return NPathQueryType.SelectObjects; } return NPathQueryType.SelectObjects; }
private void ParseSelectClause(NPathSelectClause selectClause) { if (tokenizer.GetNextToken().IsType("distinct")) { selectClause.Distinct = true; tokenizer.MoveNext(); } if (tokenizer.GetNextToken().IsType("top")) { selectClause.HasTop = true; tokenizer.MoveNext(); double top = double.Parse(tokenizer.GetNextToken("decimal", "Decimal value").Text); // do not localize selectClause.Top = (int) top; tokenizer.MoveNext(); if (tokenizer.GetNextToken().IsType("percent")) { selectClause.Percent = true; tokenizer.MoveNext(); } if (tokenizer.GetNextToken().IsType("with ties")) // do not localize { selectClause.WithTies = true; tokenizer.MoveNext(); } } do { tokenizer.MoveNext(); { IValue expression = ParseExpression(); NPathSelectField field = new NPathSelectField(); field.Expression = expression; field.Alias = null; selectClause.SelectFields.Add(field); } if (tokenizer.GetCurrentToken().IsType("as")) { NPathSelectField field = selectClause.SelectFields[selectClause.SelectFields.Count - 1] as NPathSelectField; tokenizer.MoveNext(); field.Alias = tokenizer.GetCurrentToken().Text; tokenizer.MoveNext(); } } while (tokenizer.GetCurrentToken().IsType("comma")); }