예제 #1
0
		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;
		}
예제 #2
0
		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;
		}
예제 #3
0
		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;				
		}
예제 #4
0
        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"));
        }