# vi:filetype= use lib 'lib'; use Test::Nginx::Socket; repeat_each(2); plan tests => repeat_each() * 2 * blocks(); no_long_string(); run_tests(); #no_diff(); __DATA__ === TEST 1: rds in a single buf (empty result set) --- config location = /single { default_type 'application/x-resty-dbd-stream'; set_unescape_uri $rds $arg_rds; echo_duplicate 1 $rds; rds_json on; rds_json_format compact; } --- request eval my $rds = "\x{00}". # endian "\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 "\x{00}". # result type "\x{00}\x{00}". # std errcode "\x{00}\x{00}" . # driver errcode "\x{00}\x{00}". # driver errstr len "". # driver errstr data "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id "\x{02}\x{00}". # col count "\x{01}\x{00}". # std col type (bigint/int) "\x{03}\x{00}". # drizzle col type "\x{02}\x{00}". # col name len "id". # col name data "\x{13}\x{80}". # std col type (blob/str) "\x{fc}\x{00}". # drizzle col type "\x{04}\x{00}". # col name len "name". # col name data "\x{00}"; # row list terminator use URI::Escape; $rds = uri_escape($rds); "GET /single?rds=$rds" --- response_body chop [["id","name"]] === TEST 2: rds in a single buf (non-empty result set) --- config location = /single { default_type 'application/x-resty-dbd-stream'; set_unescape_uri $rds $arg_rds; echo_duplicate 1 $rds; rds_json on; rds_json_format compact; } --- request eval my $rds = "\x{00}". # endian "\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 "\x{00}". # result type "\x{00}\x{00}". # std errcode "\x{00}\x{00}" . # driver errcode "\x{00}\x{00}". # driver errstr len "". # driver errstr data "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id "\x{02}\x{00}". # col count "\x{01}\x{00}". # std col type (bigint/int) "\x{03}\x{00}". # drizzle col type "\x{02}\x{00}". # col name len "id". # col name data "\x{13}\x{80}". # std col type (blob/str) "\x{fc}\x{00}". # drizzle col type "\x{04}\x{00}". # col name len "name". # col name data "\x{01}". # valid row flag "\x{01}\x{00}\x{00}\x{00}". # field len "2". # field data "\x{ff}\x{ff}\x{ff}\x{ff}". # field len "". # field data "\x{01}". # valid row flag "\x{01}\x{00}\x{00}\x{00}". # field len "3". # field data "\x{03}\x{00}\x{00}\x{00}". # field len "bob". # field data "\x{00}"; # row list terminator use URI::Escape; $rds = uri_escape($rds); "GET /single?rds=$rds" --- response_body chop [["id","name"],[2,null],[3,"bob"]] === TEST 3: rds in a single buf (non-empty result set, and each row in a single buf) --- config location = /single { default_type 'application/x-resty-dbd-stream'; set_unescape_uri $a $arg_a; set_unescape_uri $b $arg_b; set_unescape_uri $c $arg_c; set_unescape_uri $d $arg_d; echo_duplicate 1 $a; echo_duplicate 1 $b; echo_duplicate 1 $c; echo_duplicate 1 $d; rds_json on; rds_json_format compact; } --- request eval my $a = "\x{00}". # endian "\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 "\x{00}". # result type "\x{00}\x{00}". # std errcode "\x{00}\x{00}" . # driver errcode "\x{00}\x{00}". # driver errstr len "". # driver errstr data "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id "\x{02}\x{00}". # col count "\x{01}\x{00}". # std col type (bigint/int) "\x{03}\x{00}". # drizzle col type "\x{02}\x{00}". # col name len "id". # col name data "\x{13}\x{80}". # std col type (blob/str) "\x{fc}\x{00}". # drizzle col type "\x{04}\x{00}". # col name len "name"; # col name data my $b = "\x{01}". # valid row flag "\x{01}\x{00}\x{00}\x{00}". # field len "2". # field data "\x{ff}\x{ff}\x{ff}\x{ff}". # field len ""; # field data my $c = "\x{01}". # valid row flag "\x{01}\x{00}\x{00}\x{00}". # field len "3". # field data "\x{03}\x{00}\x{00}\x{00}". # field len "bob"; # field data my $d = "\x{00}"; # row list terminator use URI::Escape; $a = uri_escape($a); $b = uri_escape($b); $c = uri_escape($c); $d = uri_escape($d); "GET /single?a=$a&b=$b&c=$c&d=$d" --- response_body chop [["id","name"],[2,null],[3,"bob"]] === TEST 4: rds in a single buf (non-empty result set, and each row in a single buf) --- config location = /single { default_type 'application/x-resty-dbd-stream'; set_unescape_uri $a $arg_a; set_unescape_uri $b $arg_b; set_unescape_uri $c $arg_c; echo -n $a; echo -n $b; echo -n $c; rds_json on; rds_json_format compact; } --- request eval my $a = "\x{00}". # endian "\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 "\x{00}". # result type "\x{00}\x{00}". # std errcode "\x{00}\x{00}" . # driver errcode "\x{00}\x{00}". # driver errstr len "". # driver errstr data "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected "\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id "\x{02}\x{00}". # col count "\x{01}\x{00}". # std col type (bigint/int) "\x{03}\x{00}". # drizzle col type "\x{02}\x{00}". # col name len "id". # col name data "\x{13}\x{80}". # std col type (blob/str) "\x{fc}\x{00}". # drizzle col type "\x{04}\x{00}". # col name len "name"; # col name data my $b = "\x{01}". # valid row flag "\x{01}\x{00}\x{00}\x{00}". # field len "2". # field data "\x{ff}\x{ff}\x{ff}\x{ff}". # field len ""; # field data my $c = "\x{01}". # valid row flag "\x{01}\x{00}\x{00}\x{00}". # field len "3". # field data "\x{03}\x{00}\x{00}\x{00}". # field len "bob". # field data "\x{00}"; # row list terminator use URI::Escape; $a = uri_escape($a); $b = uri_escape($b); $c = uri_escape($c); "GET /single?a=$a&b=$b&c=$c" --- response_body chop [["id","name"],[2,null],[3,"bob"]]