-- --test in_buffer -- create extension gms_tcp; create or replace function gms_tcp_test_in_buffer() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data varchar2; len integer; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20, tx_timeout=>10); num = gms_tcp.write_line(c, 'in buffer'); pg_sleep(1); num = gms_tcp.write_line(c, 'ok'); pg_sleep(1); num = gms_tcp.available(c,1); if num > 0 then len = 5; data = gms_tcp.get_text(c, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.write_line(c, 'ok'); pg_sleep(1); num = gms_tcp.available(c,1); if num > 0 then len = 12; data = gms_tcp.get_text(c, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.write_line(c, 'ok'); pg_sleep(1); num = gms_tcp.available(c,1); if num > 0 then len = 13; data = gms_tcp.get_text(c, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.write_line(c, 'ok'); pg_sleep(1); num = gms_tcp.available(c,1); if num > 0 then len = 12; data = gms_tcp.get_text(c, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.write_line(c, 'ok'); pg_sleep(1); num = gms_tcp.available(c,1); if num > 0 then len = 5; data = gms_tcp.get_text(c, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.write_line(c, 'ok'); pg_sleep(1); num = gms_tcp.available(c,1); if num > 0 then len = 17; data = gms_tcp.get_text(c, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.write_line(c, 'ok'); pg_sleep(1); num = gms_tcp.available(c,1); if num > 0 then len = 9; data = gms_tcp.get_text(c, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.write_line(c, 'ok'); pg_sleep(1); num = gms_tcp.available(c,1); if num > 0 then len = 11; data = gms_tcp.get_text(c, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.write_line(c, 'ok'); pg_sleep(1); num = gms_tcp.available(c,1); if num > 0 then data = gms_tcp.get_line(c); raise info 'available: %, rcv: %.', num, data; end if; gms_tcp.close_all_connections(); exception when gms_tcp_network_error then raise info 'caught gms_tcp_network_error'; gms_tcp.close_all_connections(); when gms_tcp_bad_argument then raise info 'caught gms_tcp_bad_argument'; gms_tcp.close_all_connections(); when gms_tcp_buffer_too_small then raise info 'caught gms_tcp_buffer_too_small'; gms_tcp.close_all_connections(); when gms_tcp_end_of_input then raise info 'caught gms_tcp_end_of_input'; gms_tcp.close_all_connections(); when gms_tcp_transfer_timeout then raise info 'caught gms_tcp_transfer_timeout'; gms_tcp.close_all_connections(); when gms_tcp_partial_multibyte_char then raise info 'caught gms_tcp_partial_multibyte_char'; gms_tcp.close_all_connections(); when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; -- --test read data -- --get line create or replace function gms_tcp_test_get_line() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data varchar2; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, out_buffer_size=>20480, tx_timeout=>10); num = gms_tcp.write_line(c, 'get line'); gms_tcp.flush(c); num = gms_tcp.available(c,1); if num > 0 then data = gms_tcp.get_line(c, true); raise info 'available: %, rcv: %.', num, data; end if; gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; --get text create or replace function gms_tcp_test_get_text() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data varchar2; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, out_buffer_size=>20480, tx_timeout=>10); num = gms_tcp.write_line(c, 'get text'); gms_tcp.flush(c); num = gms_tcp.available(c,1); if num > 0 then data = gms_tcp.get_text(c, 17, true); raise info 'available: %, rcv: %.', num, data; end if; gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; --get raw create or replace function gms_tcp_test_get_raw() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data raw; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, out_buffer_size=>20480, tx_timeout=>10); num = gms_tcp.write_line(c, 'get raw'); gms_tcp.flush(c); num = gms_tcp.available(c,1); if num > 0 then data = gms_tcp.get_raw(c, 4, true); raise info 'available: %, rcv: %.', num, data; end if; num = gms_tcp.available(c,1); if num > 0 then data = gms_tcp.get_raw(c, 8); raise info 'available: %, rcv: %.', num, data; end if; gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; --read line create or replace function gms_tcp_test_read_line() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data varchar2; len integer; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, out_buffer_size=>20480, tx_timeout=>10); num = gms_tcp.write_line(c, 'read line'); gms_tcp.flush(c); num = gms_tcp.available(c,1); if num > 0 then gms_tcp.read_line(c, data, len, true); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.available(c,1); if num > 0 then gms_tcp.read_line(c, data, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; --read text create or replace function gms_tcp_test_read_text() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data varchar2; len integer; out_len integer; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, out_buffer_size=>20480, tx_timeout=>10); num = gms_tcp.write_line(c, 'read text'); gms_tcp.flush(c); num = gms_tcp.available(c,1); if num > 0 then out_len = 18; gms_tcp.read_text(c, data, len, out_len, true); raise info 'available: %, rcv: %(%).', num, data, len; end if; gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; create or replace function gms_tcp_test_read_raw() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data raw; len integer; out_len integer; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, tx_timeout=>10); num = gms_tcp.write_line(c, 'read raw'); gms_tcp.flush(c); num = gms_tcp.available(c,1); if num > 0 then out_len = 3; gms_tcp.read_raw(c, data, len, out_len, true); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.available(c,1); if num > 0 then out_len = 4; gms_tcp.read_raw(c, data, len, out_len, true); raise info 'available: %, rcv: %(%).', num, data, len; end if; num = gms_tcp.available(c,1); if num > 0 then out_len = 8; gms_tcp.read_raw(c, data, len, out_len); raise info 'available: %, rcv: %(%).', num, data, len; end if; gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; --write line create or replace function gms_tcp_test_write_line() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data varchar2; len integer; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, newline=>'LF', tx_timeout=>10); num = gms_tcp.write_line(c, 'write line'); pg_sleep(1); num = gms_tcp.write_line(c, '0123456789'); num = gms_tcp.available(c,1); if num > 0 then gms_tcp.read_line(c, data, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; --write text create or replace function gms_tcp_test_write_text() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data varchar2; len integer; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, --out_buffer_size=>20480, tx_timeout=>10); num = gms_tcp.write_text(c, 'write text', 10); pg_sleep(1); num = gms_tcp.write_text(c, '0123456789', 6); num = gms_tcp.available(c,1); if num > 0 then gms_tcp.read_line(c, data, len); raise info 'available: %, rcv: %(%).', num, data, len; end if; gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; create or replace function gms_tcp_test_error_in_buffer_size() returns void language plpgsql as $function$ declare c gms_tcp.connection; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>40480, out_buffer_size=>20480, newline=>'lf', tx_timeout=>10); gms_tcp.close_all_connections(); exception when gms_tcp_network_error then raise info 'caught gms_tcp_network_error'; gms_tcp.close_all_connections(); when gms_tcp_bad_argument then raise info 'caught gms_tcp_bad_argument'; gms_tcp.close_all_connections(); when gms_tcp_buffer_too_small then raise info 'caught gms_tcp_buffer_too_small'; gms_tcp.close_all_connections(); when gms_tcp_end_of_input then raise info 'caught gms_tcp_end_of_input'; gms_tcp.close_all_connections(); when gms_tcp_transfer_timeout then raise info 'caught gms_tcp_transfer_timeout'; gms_tcp.close_all_connections(); when gms_tcp_partial_multibyte_char then raise info 'caught gms_tcp_partial_multibyte_char'; gms_tcp.close_all_connections(); when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; create or replace function gms_tcp_test_error_out_buffer_size() returns void language plpgsql as $function$ declare c gms_tcp.connection; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, out_buffer_size=>40480, newline=>'lf', tx_timeout=>10); gms_tcp.close_all_connections(); exception when gms_tcp_network_error then raise info 'caught gms_tcp_network_error'; gms_tcp.close_all_connections(); when gms_tcp_bad_argument then raise info 'caught gms_tcp_bad_argument'; gms_tcp.close_all_connections(); when gms_tcp_buffer_too_small then raise info 'caught gms_tcp_buffer_too_small'; gms_tcp.close_all_connections(); when gms_tcp_end_of_input then raise info 'caught gms_tcp_end_of_input'; gms_tcp.close_all_connections(); when gms_tcp_transfer_timeout then raise info 'caught gms_tcp_transfer_timeout'; gms_tcp.close_all_connections(); when gms_tcp_partial_multibyte_char then raise info 'caught gms_tcp_partial_multibyte_char'; gms_tcp.close_all_connections(); when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; -- --char_set -- create or replace function gms_tcp_test_char_set() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; data varchar2; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, in_buffer_size=>20480, out_buffer_size=>20480, cset=>'gbk', tx_timeout=>10); num = gms_tcp.write_line(c, 'char set'); gms_tcp.flush(c); num = gms_tcp.available(c,1); if num > 0 then data = gms_tcp.get_line(c); raise info 'available: %, rcv: %.', num, data; end if; gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; create or replace function gms_tcp_test_quit() returns void language plpgsql as $function$ declare c gms_tcp.connection; num integer; begin c = gms_tcp.open_connection(remote_host=>'127.0.0.1', remote_port=>12358, tx_timeout=>10); num = gms_tcp.write_line(c, 'quit'); gms_tcp.close_all_connections(); exception when others then raise info 'caught others'; gms_tcp.close_all_connections(); end; $function$; select pg_sleep(5); pg_sleep ---------- (1 row) select gms_tcp_test_in_buffer(); INFO: available: 8, rcv: aaaab(5). CONTEXT: referenced column: gms_tcp_test_in_buffer INFO: available: 11, rcv: bbbccccdddd(12). CONTEXT: referenced column: gms_tcp_test_in_buffer INFO: available: 8, rcv: eeeeffff(13). CONTEXT: referenced column: gms_tcp_test_in_buffer INFO: available: 8, rcv: gggghhhh(12). CONTEXT: referenced column: gms_tcp_test_in_buffer INFO: available: 8, rcv: 01234(5). CONTEXT: referenced column: gms_tcp_test_in_buffer INFO: available: 11, rcv: 567aaaabbbb(17). CONTEXT: referenced column: gms_tcp_test_in_buffer INFO: available: 8, rcv: ccccdddd(9). CONTEXT: referenced column: gms_tcp_test_in_buffer INFO: available: 8, rcv: eeeeffff(11). CONTEXT: referenced column: gms_tcp_test_in_buffer INFO: available: 8, rcv: gggghhhh. CONTEXT: referenced column: gms_tcp_test_in_buffer gms_tcp_test_in_buffer ------------------------ (1 row) select gms_tcp_test_get_line(); INFO: available: 28, rcv: get line, abcdefg1234567890 . CONTEXT: referenced column: gms_tcp_test_get_line gms_tcp_test_get_line ----------------------- (1 row) select gms_tcp_test_get_text(); INFO: available: 28, rcv: get text, abcdefg. CONTEXT: referenced column: gms_tcp_test_get_text gms_tcp_test_get_text ----------------------- (1 row) select gms_tcp_test_get_raw(); INFO: available: 10, rcv: 01020304. CONTEXT: referenced column: gms_tcp_test_get_raw INFO: available: 10, rcv: 0102030405060708. CONTEXT: referenced column: gms_tcp_test_get_raw gms_tcp_test_get_raw ---------------------- (1 row) select gms_tcp_test_read_line(); INFO: available: 29, rcv: read line, abcdefg1234567890 (29). CONTEXT: referenced column: gms_tcp_test_read_line gms_tcp_test_read_line ------------------------ (1 row) select gms_tcp_test_read_text(); INFO: available: 29, rcv: read text, abcdefg(18). CONTEXT: referenced column: gms_tcp_test_read_text gms_tcp_test_read_text ------------------------ (1 row) select gms_tcp_test_read_raw(); INFO: available: 10, rcv: 010203(6). CONTEXT: referenced column: gms_tcp_test_read_raw INFO: available: 10, rcv: 01020304(8). CONTEXT: referenced column: gms_tcp_test_read_raw INFO: available: 10, rcv: 0102030405060708(16). CONTEXT: referenced column: gms_tcp_test_read_raw gms_tcp_test_read_raw ----------------------- (1 row) select gms_tcp_test_write_line(); gms_tcp_test_write_line ------------------------- (1 row) select gms_tcp_test_write_text(); gms_tcp_test_write_text ------------------------- (1 row) select gms_tcp_test_error_in_buffer_size(); INFO: caught gms_tcp_bad_argument CONTEXT: referenced column: gms_tcp_test_error_in_buffer_size gms_tcp_test_error_in_buffer_size ----------------------------------- (1 row) select gms_tcp_test_error_out_buffer_size(); INFO: caught gms_tcp_bad_argument CONTEXT: referenced column: gms_tcp_test_error_out_buffer_size gms_tcp_test_error_out_buffer_size ------------------------------------ (1 row) select gms_tcp_test_char_set(); INFO: available: 7, rcv: abcdefg. CONTEXT: referenced column: gms_tcp_test_char_set gms_tcp_test_char_set ----------------------- (1 row) select gms_tcp_test_quit(); gms_tcp_test_quit ------------------- (1 row) drop function gms_tcp_test_in_buffer(); drop function gms_tcp_test_get_line(); drop function gms_tcp_test_get_text(); drop function gms_tcp_test_get_raw(); drop function gms_tcp_test_read_line(); drop function gms_tcp_test_read_text(); drop function gms_tcp_test_read_raw(); drop function gms_tcp_test_write_line(); drop function gms_tcp_test_write_text(); drop function gms_tcp_test_error_in_buffer_size(); drop function gms_tcp_test_error_out_buffer_size(); drop function gms_tcp_test_char_set(); drop function gms_tcp_test_quit();