-
-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support json type #263
Merged
Merged
Support json type #263
Changes from 4 commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
82dcb31
Support json type
Tigrov 916b0a0
Apply StyleCI fix
Tigrov ae25f13
Update comment for JsonExpressionBuilder
Tigrov 41493ac
Add line to CHANGELOG.md
Tigrov 99b3cfa
Merge remote-tracking branch 'origin/master' into support_json_type
Tigrov 6825b86
Fix test issues
Tigrov 1ec3ec8
Merge branch 'master' into support_json_type
samdark File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Yiisoft\Db\Sqlite\Builder; | ||
|
||
use JsonException; | ||
use Yiisoft\Db\Exception\Exception; | ||
use Yiisoft\Db\Exception\InvalidArgumentException; | ||
use Yiisoft\Db\Exception\InvalidConfigException; | ||
use Yiisoft\Db\Exception\NotSupportedException; | ||
use Yiisoft\Db\Expression\ExpressionBuilderInterface; | ||
use Yiisoft\Db\Expression\ExpressionInterface; | ||
use Yiisoft\Db\Expression\JsonExpression; | ||
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; | ||
use Yiisoft\Db\Query\QueryInterface; | ||
use Yiisoft\Json\Json; | ||
|
||
/** | ||
* Builds expressions for {@see `Yiisoft\Db\Expression\JsonExpression`} for SQLite. | ||
*/ | ||
final class JsonExpressionBuilder implements ExpressionBuilderInterface | ||
{ | ||
public function __construct(private QueryBuilderInterface $queryBuilder) | ||
{ | ||
} | ||
|
||
/** | ||
* The method builds the raw SQL from the `$expression` that won't be additionally escaped or quoted. | ||
* | ||
* @param JsonExpression $expression The expression to build. | ||
* @param array $params The binding parameters. | ||
* | ||
* @throws Exception | ||
* @throws InvalidArgumentException | ||
* @throws InvalidConfigException | ||
* @throws JsonException | ||
* @throws NotSupportedException | ||
* | ||
* @return string The raw SQL that won't be additionally escaped or quoted. | ||
*/ | ||
public function build(ExpressionInterface $expression, array &$params = []): string | ||
{ | ||
/** @psalm-var mixed $value */ | ||
$value = $expression->getValue(); | ||
|
||
if ($value instanceof QueryInterface) { | ||
[$sql, $params] = $this->queryBuilder->build($value, $params); | ||
|
||
return "($sql)"; | ||
} | ||
|
||
return $this->queryBuilder->bindParam(Json::encode($value), $params); | ||
} | ||
} |
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or you can replace
Json::encode()
in other place tojson_encode
and drop dependencyyiisoft/json
. It's even better this way.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Json::encode()
is used according to MySQL and PostgreSQLhttps://github.com/yiisoft/db-mysql/blob/master/src/Builder/JsonExpressionBuilder.php#L53
https://github.com/yiisoft/db-pgsql/blob/master/src/Builder/JsonExpressionBuilder.php#L56
Json::encode()
Pre-processes the data before sending it tojson_encode()
:https://github.com/yiisoft/json/blob/master/src/Json.php#L100
Json::decode()
is the same asjson_decode()
but with default arguments:https://github.com/yiisoft/json/blob/master/src/Json.php#L81
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Still good idea to use the helper's function
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@xepozz Do you mean use
Json::decode()
?MySQL and PostgreSQL use
json_decode()
directlyhttps://github.com/yiisoft/db-mysql/blob/master/src/ColumnSchema.php#L59
https://github.com/yiisoft/db-pgsql/blob/master/src/ColumnSchema.php#L145