Render ExpressionInterface check expressions and default the name - #184
Open
simon-mundy wants to merge 2 commits into
Open
Render ExpressionInterface check expressions and default the name#184simon-mundy wants to merge 2 commits into
simon-mundy wants to merge 2 commits into
Conversation
Check documented its expression as string|ExpressionInterface but always wrapped it in a Literal, so an Expression was accepted at construction and threw a TypeError at render. An empty string rendered a bare CONSTRAINT header with no CHECK clause, and the name argument had no default. An ExpressionInterface expression now contributes its own specification and values to the check, so its identifiers and values are quoted by the platform. A plain string stays a literal SQL fragment by design. An empty string throws InvalidArgumentException at construction, matching Expression::setExpression(), and the name defaults to null like PrimaryKey and UniqueKey. Fixes php-db#177 Signed-off-by: Simon Mundy <simon.mundy@peptolab.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
CI installs the newest Mago, and 1.47.5 changed how the analyzer handles nested array shapes: prepareDataHierarchy() re-binds a reference into the MetadataData shape on every loop iteration, which no longer completes in useful time. Re-type the reference as a plain array so the shape is not re-derived per iteration, and adjust the expected findings accordingly. Regenerate the analyzer baseline for the reworded findings in Select, PredicateSet, Profiler and AbstractSql (the issues are unchanged, the messages are not), and reduce the continuation indent of two multi-line conditions in AbstractTableGateway to match the 1.47.4+ formatter. Signed-off-by: Simon Mundy <simon.mundy@peptolab.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Checknow takesstring|ExpressionInterface $expression, ?string $name = null. AnExpressionInterfaceexpression merges its owngetExpressionData()into the check — specCHECK (<inner spec>), values appended — so identifiers and values inside it are quoted by the platform instead of being flattened into aLiteraland failing with aTypeError. RendersCHECK (a > '1')andCHECK ("a" > "b"). A plain string stays aLiteral; it is an expression slot by design and the docs now say so.An empty string throws
Sql\Exception\InvalidArgumentExceptionat construction, the same exceptionExpression::setExpression()throws, rather than rendering a bareCONSTRAINTheader with noCHECKclause.$namedefaults tonullin line withPrimaryKeyandUniqueKey.Values are always inlined: DDL extends
AbstractSql, notAbstractPreparableSql, and MySQL rejects a parameter marker inside a CHECK anyway (3815).CheckTestcovers the merged expression data, quoted values and identifiers viagetSqlString(),%inside anExpressionwith and without a name, an unnamed check, the column-level inline form ("age" INTEGER NOT NULL CONSTRAINT "chk_age" CHECK (age >= 0)), and the empty-string exception.Fixes #177