PostgreSQL Source Code git master
|
#include "postgres_fe.h"
#include <string.h>
#include <stdio.h>
#include "fe_utils/psqlscan.h"
#include "fe_utils/string_utils.h"
#include "getopt_long.h"
#include "libpq-fe.h"
#include "mb/pg_wchar.h"
#include "utils/memdebug.h"
Go to the source code of this file.
Data Structures | |
struct | pe_test_config |
struct | pe_test_escape_func |
struct | pe_test_vector |
Macros | |
#define | TV(enc, string) {.client_encoding = (enc), .escape=string, .escape_len=sizeof(string) - 1, } |
#define | TV_LEN(enc, string, len) {.client_encoding = (enc), .escape=string, .escape_len=len, } |
#define | TOSTR_CASE(sym) case sym: return #sym |
#define | NEVER_ACCESS_STR "\xff never-to-be-touched" |
Typedefs | |
typedef struct pe_test_config | pe_test_config |
typedef struct pe_test_escape_func | pe_test_escape_func |
typedef struct pe_test_vector | pe_test_vector |
Functions | |
static bool | escape_literal (PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, PQExpBuffer escape_err) |
static bool | escape_identifier (PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, PQExpBuffer escape_err) |
static bool | escape_string_conn (PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, PQExpBuffer escape_err) |
static bool | escape_string (PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, PQExpBuffer escape_err) |
static bool | escape_replace (PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, PQExpBuffer escape_err) |
static bool | escape_append_literal (PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, PQExpBuffer escape_err) |
static bool | escape_fmt_id (PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, PQExpBuffer escape_err) |
static void | escapify (PQExpBuffer buf, const char *str, size_t len) |
static void | report_result (pe_test_config *tc, bool success, PQExpBuffer testname, PQExpBuffer details, const char *subname, const char *resultdesc) |
static bool | encoding_conflicts_ascii (int encoding) |
static const char * | scan_res_s (PsqlScanResult res) |
static void | test_psql_parse (pe_test_config *tc, PQExpBuffer testname, PQExpBuffer input_buf, PQExpBuffer details) |
static void | test_one_vector_escape (pe_test_config *tc, const pe_test_vector *tv, const pe_test_escape_func *ef) |
static void | test_one_vector (pe_test_config *tc, const pe_test_vector *tv) |
static void | usage (const char *hint) |
int | main (int argc, char *argv[]) |
Variables | |
static const PsqlScanCallbacks | test_scan_callbacks |
static pe_test_escape_func | pe_test_escape_funcs [] |
static pe_test_vector | pe_test_vectors [] |
#define NEVER_ACCESS_STR "\xff never-to-be-touched" |
#define TOSTR_CASE | ( | sym | ) | case sym: return #sym |
#define TV | ( | enc, | |
string | |||
) | {.client_encoding = (enc), .escape=string, .escape_len=sizeof(string) - 1, } |
Definition at line 285 of file test_escape.c.
Definition at line 286 of file test_escape.c.
typedef struct pe_test_config pe_test_config |
typedef struct pe_test_escape_func pe_test_escape_func |
typedef struct pe_test_vector pe_test_vector |
|
static |
Definition at line 450 of file test_escape.c.
References encoding, and PG_ENCODING_BE_LAST.
Referenced by test_one_vector_escape().
|
static |
Definition at line 218 of file test_escape.c.
References appendStringLiteral(), conn, and PQclientEncoding().
|
static |
Definition at line 228 of file test_escape.c.
References appendPQExpBufferStr(), conn, fmtId(), PQclientEncoding(), and setFmtEncoding().
|
static |
Definition at line 114 of file test_escape.c.
References appendPQExpBuffer(), appendPQExpBufferStr(), conn, PQExpBufferData::data, PQExpBufferData::len, PQerrorMessage(), PQescapeIdentifier(), and PQfreemem().
|
static |
Definition at line 90 of file test_escape.c.
References appendPQExpBuffer(), appendPQExpBufferStr(), conn, PQExpBufferData::data, PQExpBufferData::len, PQerrorMessage(), PQescapeLiteral(), and PQfreemem().
|
static |
Definition at line 192 of file test_escape.c.
References appendPQExpBufferChar(), appendPQExpBufferStr(), and i.
|
static |
Definition at line 169 of file test_escape.c.
References appendPQExpBufferChar(), PQExpBufferData::data, enlargePQExpBuffer(), PQExpBufferData::len, and PQescapeString().
|
static |
Definition at line 138 of file test_escape.c.
References appendPQExpBuffer(), appendPQExpBufferChar(), conn, PQExpBufferData::data, enlargePQExpBuffer(), error(), PQExpBufferData::len, PQerrorMessage(), and PQescapeStringConn().
|
static |
Definition at line 394 of file test_escape.c.
References appendPQExpBuffer(), appendPQExpBufferChar(), appendPQExpBufferStr(), buf, i, len, and str.
Referenced by test_one_vector_escape(), and test_psql_parse().
int main | ( | int | argc, |
char * | argv[] | ||
) |
Definition at line 812 of file test_escape.c.
References pe_test_config::conn, CONNECTION_OK, pe_test_config::conninfo, pe_test_config::failure_count, pe_test_config::force_unsupported, fprintf, getopt_long(), i, lengthof, no_argument, optarg, optind, pe_test_vectors, PQconnectdb(), PQerrorMessage(), PQfinish(), PQstatus(), printf, required_argument, pe_test_config::test_count, test_one_vector(), usage(), and pe_test_config::verbosity.
|
static |
Definition at line 413 of file test_escape.c.
References PQExpBufferData::data, pe_test_config::failure_count, printf, subname, success, pe_test_config::test_count, and pe_test_config::verbosity.
Referenced by test_one_vector_escape(), and test_psql_parse().
|
static |
Definition at line 462 of file test_escape.c.
References pg_unreachable, PSCAN_BACKSLASH, PSCAN_EOL, PSCAN_INCOMPLETE, PSCAN_SEMICOLON, and TOSTR_CASE.
Referenced by test_psql_parse().
|
static |
Definition at line 771 of file test_escape.c.
References pe_test_vector::client_encoding, pe_test_config::conn, fprintf, lengthof, pe_test_escape_funcs, PQerrorMessage(), PQsetClientEncoding(), and test_one_vector_escape().
Referenced by main().
|
static |
Definition at line 541 of file test_escape.c.
References appendBinaryPQExpBuffer(), appendPQExpBuffer(), appendPQExpBufferChar(), appendPQExpBufferStr(), pe_test_vector::client_encoding, pe_test_config::conn, createPQExpBuffer(), PQExpBufferData::data, destroyPQExpBuffer(), encoding_conflicts_ascii(), pe_test_escape_func::escape, pe_test_vector::escape, pe_test_vector::escape_len, escapify(), pe_test_config::force_unsupported, PQExpBufferData::len, pe_test_escape_func::name, NEVER_ACCESS_STR, pg_encoding_verifymbstr(), PQclientEncoding(), report_result(), pe_test_escape_func::reports_errors, strnlen(), pe_test_escape_func::supports_input_length, pe_test_escape_func::supports_only_ascii_overlap, pe_test_escape_func::supports_only_valid, test_psql_parse(), and VALGRIND_MAKE_MEM_NOACCESS.
Referenced by test_one_vector().
|
static |
Definition at line 484 of file test_escape.c.
References appendPQExpBuffer(), pe_test_config::conn, createPQExpBuffer(), PQExpBufferData::data, destroyPQExpBuffer(), escapify(), PQExpBufferData::len, PQclientEncoding(), PROMPT_READY, PSCAN_EOL, PSCAN_INCOMPLETE, psql_scan(), psql_scan_create(), psql_scan_destroy(), psql_scan_setup(), report_result(), resetPQExpBuffer(), scan_res_s(), and test_scan_callbacks.
Referenced by test_one_vector_escape().
|
static |
Definition at line 789 of file test_escape.c.
References fprintf, and printf.
Referenced by main().
|
static |
Definition at line 238 of file test_escape.c.
Referenced by test_one_vector().
|
static |
Definition at line 287 of file test_escape.c.
Referenced by main().
|
static |
Definition at line 84 of file test_escape.c.
Referenced by test_psql_parse().