1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "pool.h"
#include "pool_config.h"
#include "pool_relcache.h"
#include "pool_timestamp.h"
#include "parser/parser.h"
/* for get_current_timestamp() (MASTER() macro) */
POOL_REQUEST_INFO _req_info;
POOL_REQUEST_INFO *Req_info = &_req_info;
POOL_CONFIG _pool_config;
POOL_CONFIG *pool_config = &_pool_config;
typedef struct {
char *attrname; /* attribute name */
char *adsrc; /* default value expression */
int use_timestamp;
} TSAttr;
typedef struct {
int relnatts;
TSAttr attr[4];
} TSRel;
TSRel rc[2] = {
{ 4, {
{ "c1", "", 0 },
{ "c2", "", 1 },
{ "c3", "", 0 },
{ "c4", "", 1 }
} },
{ 4, {
{ "c1", "", 0 },
{ "c2", "", 0 },
{ "c3", "", 0 },
{ "c4", "", 0 }
} }
};
int pool_virtual_master_db_node_id(void)
{
return 0;
}
bool pool_has_pgpool_regclass(void)
{
return false;
}
POOL_RELCACHE *
pool_create_relcache(int cachesize, char *sql, func_ptr register_func, func_ptr unregister_func, bool issessionlocal)
{
return (POOL_RELCACHE *) 1;
}
void *
pool_search_relcache(POOL_RELCACHE *relcache, POOL_CONNECTION_POOL *backend, char *table)
{
if (strcmp(table, "\"rel1\"") == 0)
return (void *) &(rc[0]);
else
return (void *) &(rc[1]);
}
POOL_STATUS
do_query(POOL_CONNECTION *backend, char *query, POOL_SELECT_RESULT **result, int major) {
static POOL_SELECT_RESULT res;
static char *data[1] = {
"2009-01-01 23:59:59.123456+09"
};
res.numrows = 1;
res.data = data;
*result = &res;
return POOL_CONTINUE;
}
int
main(int argc, char **argv)
{
char *query;
List *tree;
ListCell *l;
StartupPacket sp;
POOL_CONNECTION_POOL backend;
POOL_CONNECTION_POOL_SLOT slot;
POOL_SENT_MESSAGE msg;
POOL_QUERY_CONTEXT context;
msg.query_context = &context;
backend.slots[0] = &slot;
slot.sp = &sp;
pool_config->replication_mode = 1;
if (argc != 2)
{
fprintf(stderr, "./timestmp-test query\n");
exit(1);
}
tree = raw_parser(argv[1]);
if (tree == NULL)
{
printf("syntax error: %s\n", argv[1]);
}
else
{
foreach(l, tree)
{
msg.num_tsparams = 0;
Node *node = (Node *) lfirst(l);
query = rewrite_timestamp(&backend, node, false, &msg);
if (query)
printf("%s\n", query);
else
printf("%s\n", argv[1]);
}
}
return 0;
}
void child_exit(int code) { exit (code); }
void pool_error(const char *fmt,...) {}
void pool_debug(const char *fmt,...) {}
void pool_log(const char *fmt,...) {}
void free_select_result(POOL_SELECT_RESULT *result) {}
|