Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita2f116a

Browse files
NikitOS94NikitOS94
NikitOS94
authored and
NikitOS94
committed
New tests for parse_mquery
1 parent7757b7a commita2f116a

File tree

2 files changed

+368
-0
lines changed

2 files changed

+368
-0
lines changed

‎expected/jsquery.out

Lines changed: 303 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2999,4 +2999,307 @@ select v from test_jsquery where v @@ parse_mquery('{ { $text: { $search: "Flew"
29992999
---
30003000
(0 rows)
30013001

3002+
select '{ "a" : "ssl" }'::jsonb @@ parse_mquery('{ a: { $in: [ "ssl","security"] } }');
3003+
?column?
3004+
----------
3005+
t
3006+
(1 row)
3007+
3008+
select '{ "a" : 1 }'::jsonb @@ parse_mquery('{ a: { $in: [ "ssl","security"] } }');
3009+
?column?
3010+
----------
3011+
f
3012+
(1 row)
3013+
3014+
select '{ "a" : "ssl" }'::jsonb @@ parse_mquery('{ a: { $nin: [ "ssl","security"] } }');
3015+
?column?
3016+
----------
3017+
f
3018+
(1 row)
3019+
3020+
select '{ "a" : "sslqwerty" }'::jsonb @@ parse_mquery('{ a: { $nin: [ "ssl","security"] } }');
3021+
?column?
3022+
----------
3023+
t
3024+
(1 row)
3025+
3026+
select '{ "a" : [ "ssl","security"] }'::jsonb @@ parse_mquery('{ a: { $size: 2 } }');
3027+
?column?
3028+
----------
3029+
t
3030+
(1 row)
3031+
3032+
select '{ "a" : [ "ssl","security"] }'::jsonb @@ parse_mquery('{ a: { $size: 1 } }');
3033+
?column?
3034+
----------
3035+
f
3036+
(1 row)
3037+
3038+
select '{ "a" : [ "ssl","security", "pattern"] }'::jsonb @@ parse_mquery('{ a: { $all: [ "ssl","security"] } }');
3039+
?column?
3040+
----------
3041+
t
3042+
(1 row)
3043+
3044+
select '{ "a" : [ "ssl","pattern"] }'::jsonb @@ parse_mquery('{ a: { $all: [ "ssl","security"] } }');
3045+
?column?
3046+
----------
3047+
f
3048+
(1 row)
3049+
3050+
select '{ "a" : [ "ssl","security"] }'::jsonb @@ parse_mquery('{ a: { $all: [ "ssl","security"] } }');
3051+
?column?
3052+
----------
3053+
t
3054+
(1 row)
3055+
3056+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ a : { $exists : false } }');
3057+
?column?
3058+
----------
3059+
f
3060+
(1 row)
3061+
3062+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ a : { $exists : true } }');
3063+
?column?
3064+
----------
3065+
t
3066+
(1 row)
3067+
3068+
select '{ "b" : 2 }'::jsonb @@ parse_mquery('{ a : { $exists : false } }');
3069+
?column?
3070+
----------
3071+
t
3072+
(1 row)
3073+
3074+
select '{ "b" : 2 }'::jsonb @@ parse_mquery('{ a : { $exists : true } }');
3075+
?column?
3076+
----------
3077+
f
3078+
(1 row)
3079+
3080+
select '{ "b" : 2 }'::jsonb @@ parse_mquery('{ b: { $type: "int" } }');
3081+
?column?
3082+
----------
3083+
t
3084+
(1 row)
3085+
3086+
select '{ "b" : "qwerttyu" }'::jsonb @@ parse_mquery('{ b: { $type: "int" } }');
3087+
?column?
3088+
----------
3089+
f
3090+
(1 row)
3091+
3092+
select '{ "b" : 2 }'::jsonb @@ parse_mquery('{ b: { $type: "long" } }');
3093+
?column?
3094+
----------
3095+
t
3096+
(1 row)
3097+
3098+
select '{ "b" : "qwerttyu" }'::jsonb @@ parse_mquery('{ b: { $type: "long" } }');
3099+
?column?
3100+
----------
3101+
f
3102+
(1 row)
3103+
3104+
select '{ "b" : true }'::jsonb @@ parse_mquery('{ b: { $type: "bool" } }');
3105+
?column?
3106+
----------
3107+
t
3108+
(1 row)
3109+
3110+
select '{ "b" : "fklgjlksdfgsldflsgjslkrjekfjkl" }'::jsonb @@ parse_mquery('{ b: { $type: "bool" } }');
3111+
?column?
3112+
----------
3113+
f
3114+
(1 row)
3115+
3116+
select '{ "b" : "fklgjlksdfgsldflsgjslkrjekfjkl" }'::jsonb @@ parse_mquery('{ b: { $type: "array" } }');
3117+
?column?
3118+
----------
3119+
f
3120+
(1 row)
3121+
3122+
select '{ "b" : [1, 4] }'::jsonb @@ parse_mquery('{ b: { $type: "array" } }');
3123+
?column?
3124+
----------
3125+
t
3126+
(1 row)
3127+
3128+
select '{ "b" : "fklgjlksdfgsldflsgjslkrjekfjkl" }'::jsonb @@ parse_mquery('{ b: { $type: "string" } }');
3129+
?column?
3130+
----------
3131+
t
3132+
(1 row)
3133+
3134+
select '{ "b" : [1, 4] }'::jsonb @@ parse_mquery('{ b: { $type: "string" } }');
3135+
?column?
3136+
----------
3137+
f
3138+
(1 row)
3139+
3140+
select '{ "b" : 2.23432 }'::jsonb @@ parse_mquery('{ b: { $type: "double" } }');
3141+
?column?
3142+
----------
3143+
t
3144+
(1 row)
3145+
3146+
select '{ "b" : 2 }'::jsonb @@ parse_mquery('{ b: { $type: "double" } }');
3147+
?column?
3148+
----------
3149+
t
3150+
(1 row)
3151+
3152+
select '{ "b" : 2 }'::jsonb @@ parse_mquery('{ b: { $type: "decimal" } }');
3153+
?column?
3154+
----------
3155+
t
3156+
(1 row)
3157+
3158+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "maxKey" } }');
3159+
ERROR: Jsquery is not supported MongoDB "maxKey" value type
3160+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "binData" } }');
3161+
ERROR: Jsquery is not supported MongoDB "binData" value type
3162+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "objectId" } }');
3163+
ERROR: Jsquery is not supported MongoDB "objectId" value type
3164+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "javascript" } }');
3165+
ERROR: Jsquery is not supported MongoDB "javascript" value type
3166+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "symbol" } }');
3167+
ERROR: Jsquery is not supported MongoDB "symbol" value type
3168+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "javascriptWithScope" } }');
3169+
ERROR: Jsquery is not supported MongoDB "javascriptWithScope" value type
3170+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "timestamp" } }');
3171+
ERROR: Jsquery is not supported MongoDB "timestamp" value type
3172+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "minKey" } }');
3173+
ERROR: Jsquery is not supported MongoDB "minKey" value type
3174+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "regex" } }');
3175+
ERROR: Jsquery is not supported MongoDB "regex" value type
3176+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "null" } }');
3177+
ERROR: Jsquery is not supported MongoDB "null" value type
3178+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "date" } }');
3179+
ERROR: Jsquery is not supported MongoDB "date" value type
3180+
select '{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "undefined" } }');
3181+
ERROR: Jsquery is not supported MongoDB "undefined" value type
3182+
/* Or operator */
3183+
select '{ "quantity" : 2, "price" : 10 }'::jsonb @@ parse_mquery('{ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }');
3184+
?column?
3185+
----------
3186+
t
3187+
(1 row)
3188+
3189+
select '{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }');
3190+
?column?
3191+
----------
3192+
t
3193+
(1 row)
3194+
3195+
select '{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $or: [ { quantity: { $lt: 20 } }, { price: 100 } ] }');
3196+
?column?
3197+
----------
3198+
f
3199+
(1 row)
3200+
3201+
/* Nor operator */
3202+
select '{ "quantity" : 2, "price" : 10 }'::jsonb @@ parse_mquery('{ $nor: [ { quantity: { $lt: 20 } }, { price: 10 } ] }');
3203+
?column?
3204+
----------
3205+
f
3206+
(1 row)
3207+
3208+
select '{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $nor: [ { quantity: { $lt: 20 } }, { price: 10 } ] }');
3209+
?column?
3210+
----------
3211+
t
3212+
(1 row)
3213+
3214+
select '{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $nor: [ { quantity: { $lt: 20 } }, { price: 100 } ] }');
3215+
?column?
3216+
----------
3217+
t
3218+
(1 row)
3219+
3220+
/* And operator */
3221+
select '{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $and: [ { quantity: { $lt: 20 } }, { price: 100 } ] }');
3222+
?column?
3223+
----------
3224+
f
3225+
(1 row)
3226+
3227+
select '{ "quantity" : 5, "price" : 100 }'::jsonb @@ parse_mquery('{ $and: [ { quantity: { $lt: 20 } }, { price: 100 } ] }');
3228+
?column?
3229+
----------
3230+
t
3231+
(1 row)
3232+
3233+
/* Not operator */
3234+
select '{ "quantity" : 5, "price" : 100 }'::jsonb @@ parse_mquery('{ price: { $not: { $gt: 1.99 } } }');
3235+
?column?
3236+
----------
3237+
f
3238+
(1 row)
3239+
3240+
select '{ "quantity" : 5, "price" : 1 }'::jsonb @@ parse_mquery('{ price: { $not: { $gt: 1.99 } } }');
3241+
?column?
3242+
----------
3243+
t
3244+
(1 row)
3245+
3246+
/* Mod operator */
3247+
select '{ "quantity" : 2, "price" : 10 }'::jsonb @@ parse_mquery('{ qty: { $mod: [ 4, 0 ] } } ');
3248+
ERROR: MongoDB module operator is not supported by jsquery
3249+
select '{"a": 5}'::jsonb @@ parse_mquery('{ a: { $eq: 5 } }');
3250+
?column?
3251+
----------
3252+
t
3253+
(1 row)
3254+
3255+
select '{"a": 5}'::jsonb @@ parse_mquery('{ a: { $eq: 6 } }');
3256+
?column?
3257+
----------
3258+
f
3259+
(1 row)
3260+
3261+
select '{ "quantity" : "qw", "price" : 10 }'::jsonb @@ parse_mquery('{ { $where: "qw"} }');
3262+
ERROR: MongoDB where clause is not supported by jsquery
3263+
select '{ "quantity" : "qw", "price" : 10 }'::jsonb @@ parse_mquery('{ { $text: { $search: "qsddjkhjw" } } }');
3264+
?column?
3265+
----------
3266+
f
3267+
(1 row)
3268+
3269+
select '{ "quantity" : "qw", "price" : 10 }'::jsonb @@ parse_mquery('{ { $text: { $search: "qw" } } }');
3270+
?column?
3271+
----------
3272+
t
3273+
(1 row)
3274+
3275+
select '{"a": { "qwerty" : 5} }'::jsonb @@ parse_mquery('{ "a.qwerty" : { $eq: 6 } }');
3276+
?column?
3277+
----------
3278+
f
3279+
(1 row)
3280+
3281+
select '{"a": { "qwerty" : { "asdfgh" : { "fgfhg" : 5 } } } }'::jsonb @@ parse_mquery('{ "a.qwerty.asdfgh.fgfhg" : { $eq: 5 } }');
3282+
?column?
3283+
----------
3284+
t
3285+
(1 row)
3286+
3287+
select '{ "_id" : 3, "results" : [ { "product" : "abc", "score" : 7 }, { "product" : "abc", "score" : 8 } ] }' @@ parse_mquery('{ results: { $elemMatch: { product: "abc" } } }');
3288+
?column?
3289+
----------
3290+
t
3291+
(1 row)
3292+
3293+
select '{ "_id" : 3, "results" : [ 81, 84, 83] }' @@ parse_mquery('{ results: { $elemMatch: { $gte: 80, $lt: 85 } } }');
3294+
?column?
3295+
----------
3296+
t
3297+
(1 row)
3298+
3299+
select '{ "_id" : 3, "results" : [ 81, 86, 83] }' @@ parse_mquery('{ results: { $elemMatch: { $gte: 80, $lt: 85 } } }');
3300+
?column?
3301+
----------
3302+
f
3303+
(1 row)
3304+
30023305
RESET enable_seqscan;

‎sql/jsquery.sql

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,4 +563,69 @@ select v from test_jsquery where v @@ parse_mquery('{ array : { $all: [2,3] } }'
563563

564564
select vfrom test_jsquerywhere v @@ parse_mquery('{ { $text: { $search: "Flew" } } }');
565565

566+
select'{ "a" : "ssl" }'::jsonb @@ parse_mquery('{ a: { $in: [ "ssl","security"] } }');
567+
select'{ "a" : 1 }'::jsonb @@ parse_mquery('{ a: { $in: [ "ssl","security"] } }');
568+
select'{ "a" : "ssl" }'::jsonb @@ parse_mquery('{ a: { $nin: [ "ssl","security"] } }');
569+
select'{ "a" : "sslqwerty" }'::jsonb @@ parse_mquery('{ a: { $nin: [ "ssl","security"] } }');
570+
select'{ "a" : [ "ssl","security"] }'::jsonb @@ parse_mquery('{ a: { $size: 2 } }');
571+
select'{ "a" : [ "ssl","security"] }'::jsonb @@ parse_mquery('{ a: { $size: 1 } }');
572+
select'{ "a" : [ "ssl","security", "pattern"] }'::jsonb @@ parse_mquery('{ a: { $all: [ "ssl","security"] } }');
573+
select'{ "a" : [ "ssl","pattern"] }'::jsonb @@ parse_mquery('{ a: { $all: [ "ssl","security"] } }');
574+
select'{ "a" : [ "ssl","security"] }'::jsonb @@ parse_mquery('{ a: { $all: [ "ssl","security"] } }');
575+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ a : { $exists : false } }');
576+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ a : { $exists : true } }');
577+
select'{ "b" : 2 }'::jsonb @@ parse_mquery('{ a : { $exists : false } }');
578+
select'{ "b" : 2 }'::jsonb @@ parse_mquery('{ a : { $exists : true } }');
579+
select'{ "b" : 2 }'::jsonb @@ parse_mquery('{ b: { $type: "int" } }');
580+
select'{ "b" : "qwerttyu" }'::jsonb @@ parse_mquery('{ b: { $type: "int" } }');
581+
select'{ "b" : 2 }'::jsonb @@ parse_mquery('{ b: { $type: "long" } }');
582+
select'{ "b" : "qwerttyu" }'::jsonb @@ parse_mquery('{ b: { $type: "long" } }');
583+
select'{ "b" : true }'::jsonb @@ parse_mquery('{ b: { $type: "bool" } }');
584+
select'{ "b" : "fklgjlksdfgsldflsgjslkrjekfjkl" }'::jsonb @@ parse_mquery('{ b: { $type: "bool" } }');
585+
select'{ "b" : "fklgjlksdfgsldflsgjslkrjekfjkl" }'::jsonb @@ parse_mquery('{ b: { $type: "array" } }');
586+
select'{ "b" : [1, 4] }'::jsonb @@ parse_mquery('{ b: { $type: "array" } }');
587+
select'{ "b" : "fklgjlksdfgsldflsgjslkrjekfjkl" }'::jsonb @@ parse_mquery('{ b: { $type: "string" } }');
588+
select'{ "b" : [1, 4] }'::jsonb @@ parse_mquery('{ b: { $type: "string" } }');
589+
select'{ "b" : 2.23432 }'::jsonb @@ parse_mquery('{ b: { $type: "double" } }');
590+
select'{ "b" : 2 }'::jsonb @@ parse_mquery('{ b: { $type: "double" } }');
591+
select'{ "b" : 2 }'::jsonb @@ parse_mquery('{ b: { $type: "decimal" } }');
592+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "maxKey" } }');
593+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "binData" } }');
594+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "objectId" } }');
595+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "javascript" } }');
596+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "symbol" } }');
597+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "javascriptWithScope" } }');
598+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "timestamp" } }');
599+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "minKey" } }');
600+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "regex" } }');
601+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "null" } }');
602+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "date" } }');
603+
select'{ "a" : 2 }'::jsonb @@ parse_mquery('{ y: { $type: "undefined" } }');
604+
/* Or operator*/
605+
select'{ "quantity" : 2, "price" : 10 }'::jsonb @@ parse_mquery('{ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }');
606+
select'{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }');
607+
select'{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $or: [ { quantity: { $lt: 20 } }, { price: 100 } ] }');
608+
/* Nor operator*/
609+
select'{ "quantity" : 2, "price" : 10 }'::jsonb @@ parse_mquery('{ $nor: [ { quantity: { $lt: 20 } }, { price: 10 } ] }');
610+
select'{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $nor: [ { quantity: { $lt: 20 } }, { price: 10 } ] }');
611+
select'{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $nor: [ { quantity: { $lt: 20 } }, { price: 100 } ] }');
612+
/* And operator*/
613+
select'{ "quantity" : 200, "price" : 10 }'::jsonb @@ parse_mquery('{ $and: [ { quantity: { $lt: 20 } }, { price: 100 } ] }');
614+
select'{ "quantity" : 5, "price" : 100 }'::jsonb @@ parse_mquery('{ $and: [ { quantity: { $lt: 20 } }, { price: 100 } ] }');
615+
/* Not operator*/
616+
select'{ "quantity" : 5, "price" : 100 }'::jsonb @@ parse_mquery('{ price: { $not: { $gt: 1.99 } } }');
617+
select'{ "quantity" : 5, "price" : 1 }'::jsonb @@ parse_mquery('{ price: { $not: { $gt: 1.99 } } }');
618+
/* Mod operator*/
619+
select'{ "quantity" : 2, "price" : 10 }'::jsonb @@ parse_mquery('{ qty: { $mod: [ 4, 0 ] } }');
620+
select'{"a": 5}'::jsonb @@ parse_mquery('{ a: { $eq: 5 } }');
621+
select'{"a": 5}'::jsonb @@ parse_mquery('{ a: { $eq: 6 } }');
622+
select'{ "quantity" : "qw", "price" : 10 }'::jsonb @@ parse_mquery('{ { $where: "qw"} }');
623+
select'{ "quantity" : "qw", "price" : 10 }'::jsonb @@ parse_mquery('{ { $text: { $search: "qsddjkhjw" } } }');
624+
select'{ "quantity" : "qw", "price" : 10 }'::jsonb @@ parse_mquery('{ { $text: { $search: "qw" } } }');
625+
select'{"a": { "qwerty" : 5} }'::jsonb @@ parse_mquery('{ "a.qwerty" : { $eq: 6 } }');
626+
select'{"a": { "qwerty" : { "asdfgh" : { "fgfhg" : 5 } } } }'::jsonb @@ parse_mquery('{ "a.qwerty.asdfgh.fgfhg" : { $eq: 5 } }');
627+
select'{ "_id" : 3, "results" : [ { "product" : "abc", "score" : 7 }, { "product" : "abc", "score" : 8 } ] }' @@ parse_mquery('{ results: { $elemMatch: { product: "abc" } } }');
628+
select'{ "_id" : 3, "results" : [ 81, 84, 83] }' @@ parse_mquery('{ results: { $elemMatch: { $gte: 80, $lt: 85 } } }');
629+
select'{ "_id" : 3, "results" : [ 81, 86, 83] }' @@ parse_mquery('{ results: { $elemMatch: { $gte: 80, $lt: 85 } } }');
630+
566631
RESET enable_seqscan;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp