Example #1
0
        public override int ExecuteNonQuery()
        {
            if (_connection == null)
            {
                throw new Exception("You must set the Connection property before execution.");
            }
            if (string.IsNullOrEmpty(_commandText))
            {
                throw new Exception("Invalid query specified.");
            }

            ICollection <Common.Server.Engine.IParameter> _params = new List <Common.Server.Engine.IParameter>();

            Alachisoft.NosDB.Common.Storage.Caching.QueryCache.QueryCache <IDqlObject> queryParser = new Alachisoft.NosDB.Common.Storage.Caching.QueryCache.QueryCache <IDqlObject>();
            IDqlObject parsedQuery = queryParser.GetParsedQuery(_commandText);

            foreach (IDataParameter idp in _parameters)
            {
                _params.Add(new Common.Server.Engine.Impl.Parameter(idp.ParameterName, idp.Value));
            }
            Client.Collection <JSONDocument> coll = ((NosDbConnection)_connection)._database.GetCollection(((IDmObject)parsedQuery).Collection);

            long val = coll.ExecuteNonQuery(_commandText, _params);

            //ICollectionReader value = _connection._database.ExecuteQuery(query);

            return((int)val);
        }
Example #2
0
        private void ExecuteQuery(string query)
        {
            QueryCache <IDqlObject> _reducedQueryCache = new QueryCache <IDqlObject>();
            IDqlObject parsedObject = _reducedQueryCache.GetParsedQuery(query);

            if (parsedObject is SelectObject)
            {
                if (_databaseContext)
                {
                    Execute(query, QueryType.Reader);
                }
                else
                {
                    throw new Exception("For Execution of Data Query you must be in context of database.");
                }
            }
            else if (parsedObject is InsertObject || parsedObject is DeleteObject ||
                     parsedObject is UpdateObject)
            {
                if (_databaseContext)
                {
                    Execute(query, QueryType.NonQuery);
                }
                else
                {
                    throw new Exception("For Execution of Data Query you must be in context of database.");
                }
            }
            else
            {
                Execute(query, QueryType.NonDataQuery);
            }
        }
Example #3
0
        private QueryCriteria AddQueryCriteria(IDqlObject query, IList <IParameter> parameters, IQueryStore queryStore)
        {
            var queryCriteria = new QueryCriteria {
                Store = queryStore
            };

            if (query is SelectObject)
            {
                var selectQuery = query as SelectObject;
                if (selectQuery.WherePredicate != null && parameters != null)
                {
                    selectQuery.WherePredicate.AssignConstants(parameters);
                    selectQuery.WherePredicate.AssignScalarFunctions();
                }

                var functions = new List <Function>();
                foreach (var projectionValue in selectQuery.Projections)
                {
                    if (selectQuery.IsDistinct)
                    {
                        IEvaluable projValue = projectionValue as IEvaluable;
                        queryCriteria.AddDistinctField(projValue);
                    }

                    var evaluable = projectionValue as IEvaluable;
                    if (parameters != null && evaluable != null)
                    {
                        evaluable.AssignConstants(parameters);
                    }

                    if (evaluable != null)
                    {
                        if (projectionValue is AllEvaluable)
                        {
                            queryCriteria.GetAllFields = true;
                        }
                        else
                        {
                            queryCriteria.AddProjection(evaluable.ToString(), evaluable);
                        }

                        if (evaluable.Functions != null)
                        {
                            functions.AddRange(evaluable.Functions);
                        }
                    }
                }

                foreach (var function in functions)
                {
                    if (!AssignAggregateFunction(function, queryCriteria))
                    {
                        if (!AssignScalarFunction(function))
                        {
                            throw new QuerySystemException(ErrorCodes.Query.INVALID_FUNCTION_NAME_SPECIFIED,
                                                           new[] { function.FunctionNameActual });
                        }
                    }
                }

                if (selectQuery.GroupValue != null)
                {
                    foreach (var projectionValue in selectQuery.GroupValue)
                    {
                        queryCriteria.AddGroupByField(projectionValue);
                    }
                }

                if (queryCriteria.GroupByField == null && queryCriteria.ContainsAggregations &&
                    queryCriteria.Aggregations.Count > 0)
                {
                    queryCriteria.GroupByField = new AllField(Field.FieldType.Grouped);
                }

                if (selectQuery.OrderValue != null)
                {
                    foreach (var projectionValue in selectQuery.OrderValue)
                    {
                        var attribute = projectionValue;
                        if (attribute != null)
                        {
                            queryCriteria.AddOrderByField(attribute,
                                                          attribute is BinaryExpression?
                                                          ((BinaryExpression)attribute).SortOrder: SortOrder.ASC);
                        }
                    }
                }

                long limit = -1;
                if (selectQuery.Limit != null)
                {
                    limit = long.Parse(selectQuery.Limit.InString);
                }
                if (limit > -1)
                {
                    long skip = -1;

                    if (selectQuery.Skip != null)
                    {
                        skip = long.Parse(selectQuery.Skip.InString);
                    }

                    if (skip > 0)
                    {
                        limit += skip;  //: Adding this to avoid bug at query router (while applying skip query)
                    }
                    queryCriteria.AddLimit(limit);
                }
            }
            else if (query is UpdateObject)
            {
                var updateQuery = query as UpdateObject;
                if (updateQuery.WherePredicate != null && parameters != null)
                {
                    updateQuery.WherePredicate.AssignConstants(parameters);
                }
                updateQuery.Updator.AssignConstants(parameters);

                foreach (IUpdation update in updateQuery.Updator.Updations)
                {
                    foreach (var function in update.GetFunctions())
                    {
                        foreach (var argument in function.Arguments)
                        {
                            if (argument.EvaluationType != EvaluationType.Constant)
                            {
                                throw new QuerySystemException(ErrorCodes.Query.INVALID_CONSTANT_FUNCTION_SPECIFIED);
                            }
                        }

                        if (!AssignScalarFunction(function))
                        {
                            throw new QuerySystemException(ErrorCodes.Query.INVALID_FUNCTION_NAME_SPECIFIED,
                                                           new[] { function.FunctionNameActual });
                        }
                    }
                }

                queryCriteria.DocumentUpdate = updateQuery.Updator;
                queryCriteria.UpdateOption   = UpdateOption.Update;
            }
            else if (query is InsertObject)
            {
                var document = new JSONDocument();
                foreach (KeyValuePair <Attribute, IEvaluable> pair in ((InsertObject)query).ValuesToInsert)
                {
                    pair.Value.AssignConstants(parameters);

                    foreach (var function in pair.Value.Functions)
                    {
                        foreach (var argument in function.Arguments)
                        {
                            if (argument.EvaluationType != EvaluationType.Constant)
                            {
                                throw new QuerySystemException(ErrorCodes.Query.INVALID_CONSTANT_FUNCTION_SPECIFIED);
                            }
                        }

                        if (!AssignScalarFunction(function))
                        {
                            throw new QuerySystemException(ErrorCodes.Query.INVALID_FUNCTION_NAME_SPECIFIED,
                                                           new[] { function.FunctionNameActual });
                        }
                    }

                    IJsonValue jsonValue;
                    if (!pair.Value.Evaluate(out jsonValue, null))
                    {
                        throw new QuerySystemException(ErrorCodes.Query.INVALID_CONSTANT_BINARY_EXPRESSION_SPECIFIED);
                    }
                    document.Add(pair.Key.ToString(), jsonValue.Value);
                }
                queryCriteria.NewDocument  = document;
                queryCriteria.UpdateOption = UpdateOption.Insert;
            }
            else if (query is DeleteObject)
            {
                var deleteQuery = query as DeleteObject;
                if (deleteQuery.WherePredicate != null && parameters != null)
                {
                    deleteQuery.WherePredicate.AssignConstants(parameters);
                }
                queryCriteria.UpdateOption = UpdateOption.Delete;
            }
            return(queryCriteria);
        }
Example #4
0
        protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior)
        {
            if (_connection == null)
            {
                throw new Exception("You must set the Connection property before execution.");
            }
            if (string.IsNullOrEmpty(_commandText))
            {
                throw new Exception("Invalid query specified.");
            }
            if (_connection.State != ConnectionState.Open)
            {
                throw new Exception("Connection must be open to execute the command.");
            }

            try
            {
                ArrayList al = new ArrayList();
                ICollection <Common.Server.Engine.IParameter> _params = new List <Common.Server.Engine.IParameter>();

                Alachisoft.NosDB.Common.Storage.Caching.QueryCache.QueryCache <IDqlObject> queryParser = new Alachisoft.NosDB.Common.Storage.Caching.QueryCache.QueryCache <IDqlObject>();
                IDqlObject parsedQuery = queryParser.GetParsedQuery(_commandText);

                if (parsedQuery != null && parsedQuery is SelectObject)
                {
                    SelectObject select = parsedQuery as SelectObject;
                    if (select.Projections != null)
                    {
                        al = new ArrayList();
                        foreach (IEvaluable projection in select.Projections)
                        {
                            string prjct = "";
                            if (projection is BinaryExpression)
                            {
                                prjct = ((BinaryExpression)projection).Alias;
                            }
                            else
                            {
                                prjct = projection.CaseSensitiveInString.Replace("$", "");
                            }

                            if (!prjct.Contains('*'))
                            {
                                if (prjct.Contains('.')) // Incase of embedded, take the last one out.
                                {
                                    string[] parts = prjct.Split('.');
                                    prjct = parts[parts.Length - 1];
                                }
                                al.Add(prjct);
                            }
                        }
                    }
                }

                foreach (IDataParameter idp in _parameters)
                {
                    _params.Add(new Common.Server.Engine.Impl.Parameter(idp.ParameterName, idp.Value));
                }
                Client.Collection <JSONDocument> coll = ((NosDbConnection)_connection)._database.GetCollection(((SelectObject)parsedQuery).Collection);

                long val = 0;
                ICollectionReader reader = null;
                if (parsedQuery is SelectObject)
                {
                    reader = coll.ExecuteReader(_commandText, _params);
                }
                else
                {
                    val = ((NosDbConnection)_connection)._database.ExecuteNonQuery(_commandText, _params);
                }
                //    reader = _connection._database.ExecuteQuery(query);

                NosDataReader readerr = new NosDataReader(reader);
                readerr.AttributesColumns = al;
                readerr._rowsAffected     = (int)val;
                return(readerr);
            }
            finally
            {
                if (behavior == CommandBehavior.CloseConnection)
                {
                    this._connection.Close();
                }
            }
        }