Ejemplo n.º 1
0
        /// <summary>
        /// Helper to create a SQL query for CosmosDB.
        /// </summary>
        /// <param name="startingRecordId">The first record Id</param>
        /// <param name="maxRecordsToQuery">The max number of records</param>
        /// <param name="applicationState">The application state query filter</param>
        /// <returns></returns>
        private SqlQuerySpec CreateServerQuery(uint startingRecordId, uint maxRecordsToQuery, QueryApplicationState?applicationState)
        {
            string query;
            var    queryParameters = new SqlParameterCollection();

            if (maxRecordsToQuery != 0)
            {
                query = "SELECT TOP @maxRecordsToQuery";
                queryParameters.Add(new SqlParameter("@maxRecordsToQuery", maxRecordsToQuery));
            }
            else
            {
                query = "SELECT";
            }
            query += " * FROM Applications a WHERE a.ID >= @startingRecord";
            queryParameters.Add(new SqlParameter("@startingRecord", startingRecordId));
            QueryApplicationState queryState = applicationState ?? QueryApplicationState.Approved;

            if (queryState != 0)
            {
                bool first = true;
                foreach (QueryApplicationState state in Enum.GetValues(typeof(QueryApplicationState)))
                {
                    if (state == 0)
                    {
                        continue;
                    }

                    if ((queryState & state) == state)
                    {
                        var sqlParm = "@" + state.ToString().ToLower();
                        if (first)
                        {
                            query += " AND (";
                        }
                        else
                        {
                            query += " OR";
                        }
                        query += " a.ApplicationState = " + sqlParm;
                        queryParameters.Add(new SqlParameter(sqlParm, state.ToString()));
                        first = false;
                    }
                }
                if (!first)
                {
                    query += " )";
                }
            }
            query += " AND a.ClassType = @classType";
            queryParameters.Add(new SqlParameter("@classType", Application.ClassTypeName));
            query += " ORDER BY a.ID";
            SqlQuerySpec sqlQuerySpec = new SqlQuerySpec
            {
                QueryText  = query,
                Parameters = queryParameters
            };

            return(sqlQuerySpec);
        }
        internal static string ToSerializedValue(this QueryApplicationState value)
        {
            switch (value)
            {
            case QueryApplicationState.Any:
                return("any");

            case QueryApplicationState.New:
                return("new");

            case QueryApplicationState.Approved:
                return("approved");

            case QueryApplicationState.Rejected:
                return("rejected");

            case QueryApplicationState.Unregistered:
                return("unregistered");

            case QueryApplicationState.Deleted:
                return("deleted");
            }
            return(null);
        }