* use the textless endpoint (/api/queries/:id/results) for pristine
queriest
* reverse conditional. not not is making me the headaches.
* add ParameterizedQuery#is_safe with an inital naive implementation which
treats any query with a text parameter as not safe. This will be
remedied later when DB drivers will handle these parameters.
* allow getting new query results even if user has only view permissions
to the data source (given that the query is safe)
* fix lint error - getDerivedStateFromProps should be placed after state
* Revert "use the textless endpoint (/api/queries/:id/results) for pristine"
This reverts commit cd2cee7738.
* move execution preparation to a different function, which will be soon
reused
* go to textless /api/queries/:id/results by default
* let the query view decide if text or textless endpoint is needed
* allow safe queries to be executed in the UI even if the user has no
permission to execute and create new query results
* change `run_query`'s signature to accept a ParameterizedQuery instead of
constructing it inside
* use dict#get instead of a None guard
* use ParameterizedQuery in queries handler as well
* test that /queries/:id/results allows execution of safe queries even if
user has view_only permissions
* lint
* raise HTTP 400 when receiving invalid parameter values. Fixes#3394
* remove unused methods
* avoid cyclic imports by importing only when needed
* verify that a ParameterizedQuery without any parameters is considered
safe
* introduce query.parameter_schema
* encapsulate ParameterizedQuery creation inside Query
* Add check for repository url
* Use CIRCLE_REPOSITORY_URL directly
* Change percy waiting to be with resources instead of time
* Add data sources types resource to Edit Data Source + eslint fixes
* Separate Page Screenshots in different spec files
* Moved component from services->components
* Added help trigger to header
* Reverted tooltip-anchor swap
* Moved trigger location in html (to mirror saas)
* Removed white space
* Changed tooltip text to “Help”
* Update DynamicForm export
* Move UserShow to users folder
* Migrate User profile header and create DynamicForm for basic data
* Update UserShow to use UserProfile prop
* Add API Key input
* Add handler to regenerate API Key button
* Handle user profile save
* Add readOnly prop to DynamicForm and begin disabled user behavior
* Add Change Password Modal
* Remove action buttons for disabled users
* Add send password reset behavior
* Add minLength and password comparison to Password Modal
* Resend Invitation button
* Add Convert User Info
* Fix UserShow test
* Some code updates
* Add enable/disable user button
* Add UserPolicy as an idea
* Remove UserPolicy
* Create Edit Profile spec
* Move User profile screenshot to Edit Profile Spec
* Add tests for saving user and changing password errors
* CC is back :) - Fix trailing spaces
* Add test for succesful password update
* A few improvements from code review
* Remove Toggle User button when seeing your own profile
* Create InputWithCopy
* Fix possible errors when network is off and improve Email not sent alert
* Add default response object for $http possible errors
* Changes in UserEdit
- removed onClick from methods name
- regenerate API Key now uses InputWithCopy
- Password title added
* Update UserEdit render behavior and styling
- Password title changed to h5
- change rendering rules for actions
- Password modal is now closed when password is changed
- change DynamicForm readOnly to the fields and add hideSubmitButton
* Create ChangePasswordDialog and update UserEdit
* Fix possible console error
* Remove password match assertion from spec
* Fix typo
* stop testing `collect_query_parameters`, it's an implementation detail
* add tests for `missing_query_params`
* rename SQLQuery -> ParameterizedSqlQuery
* rename sql_query.py to parameterized_query.py
* split to parameterized queries and parameterized SQL queries, where
parameterized queries only do templating and parameterized SQL queries
add tree validation on top of it
* move missing parameter detection to ParameterizedQuery
* get rid of some old code
* fix tests
* set syntax to `custom`
* revert the max-age-related refactoring
* 👋 tree validations 😢
* BaseQueryRunner is no longer a factory for ParameterizedQuery, for now
* add an endpoint for running a query by its id and (optional) parameters
without having to provide the query text
* adds parameter schema to ParameterizedQuery
* adds parameter schema validation (currently for strings)
* validate number parameters
* validate date parameters
* validate parameters on POST /api/queries/<id>/results
* validate enum parameters
* validate date range parameters
* validate query-based dropdowns by preprocessing them at the handler
level and converting them to a populated enum
* change _is_date_range to be a tad more succinct
* a single assignment with a `map` is sufficiently explanatory
* Update redash/utils/parameterized_query.py
Co-Authored-By: rauchy <omer@rauchy.net>
* Update redash/utils/parameterized_query.py
Co-Authored-By: rauchy <omer@rauchy.net>
* Update redash/utils/parameterized_query.py
Co-Authored-By: rauchy <omer@rauchy.net>
* Update redash/utils/parameterized_query.py
Co-Authored-By: rauchy <omer@rauchy.net>
* Update redash/handlers/query_results.py
Co-Authored-By: rauchy <omer@rauchy.net>
* Update redash/utils/parameterized_query.py
Co-Authored-By: rauchy <omer@rauchy.net>
* build error message inside the error
* support all types of numbers as number parameters
* check for permissions when populating query-based dropdowns
* check for access to query before running it
* check for empty rows when populating query-based enums
* don't bother loading query results if user doesn't have access
* 💥 on unexpected parameter types
* parameter schema default is a list, not a dictionary
* fix a totally unrelated typo
* remove redundant null guards
* introduce /dropdown.json endpoint with dummy data
* wire frontend to /dropdown.json
* always return name/value combos from /dropdown.json
* load actual data into /dropdown.json
* pluck correct values for `name` and `value`
* reuse dropdwon plucking logic in QueryResultResource
* simplify _get_dropdown_values
* when doing parameter validation, we only care about the value and not
the display name
* rename dropdown to dropdownOptions
* move dropdown_values to utils/parameterized_query.py
* stop converting queries to enums and encapsulate the work inside
ParameterizedQuery (almost - /dropdown.json would still access the
dropdown_values method)
* re-order arguments by importance
* test query parameter validation
* tests for dropdown_values logic
* remove `.json` suffix to the dropdown endpoint
* allow `BaseResource` to handle JSON stuff
* move _pluck_name_and_value outside its containing method
* case-insensitive lookup when plucking name and value
* separate concerns and simplify test isolation for `dropdown_values`
* pick the default column according to the order specified in the query
result columns attribute
* use `current_org` instead of passing `org`
* test that user has access to the query when calling the /dropdown
endpoint
* Fix: cohorts get stuck when passing strings instead of numbers.
Parse the value to get a number.
* Use parseInt for stage
* Remove redundant parseInt
* Refine existing implementation of dashboards/queries/users lists and a common base controller
* Migrate common list page controller to React and refactor it's logic
* Migrate Dashboard list page to React
* Migrate Queries list page to React
* Migrate Users list page to React
* Remove react-timeago dependency
* Use composition instead of inheritance
* Refine implementation
* Merge sidebar into single component
* Refine column definitions
* Use simple controller instead of React context
* Refine implementation
* Restore changes from getredash/redash#2888
* Tweak Users list page
* Ability to render dynamically defined components
* Tweak users list page
* User list page for non-admins
* Fix: ItemsTable ignores isAvailable field
* Refine implementation
* Refine implementation
* Implement LiveItemsList as higher order component
* Some fixes
* Move some definitions to a better place
* Some fixes
* Refine components
* Refine UsersList page
* More comments for a god of comments
* Fix wrong tables size on smaller screens
* Tweak tables
* [Widget Params] Split title and mapping editing
* [Widget Params] Restyled source editing
* [Widget Params] Switched parameter list to table style
* Displaying different labels and help phrases when changing type
Added link to knowledge base
Fixed issue with existing param default select value
* use the textless endpoint (/api/queries/:id/results) for pristine
queriest
* Revert "use the textless endpoint (/api/queries/:id/results) for pristine"
This reverts commit cd2cee7738.
* move execution preparation to a different function, which will be soon
reused
* go to textless /api/queries/:id/results by default
* let the query view decide if text or textless endpoint is needed
* lint