📄 pg.xs
字号:
int fd int offset int whence ALIAS: PQlo_lseek = 1Oidlo_creat(conn, mode) PGconn * conn int mode ALIAS: PQlo_creat = 1intlo_tell(conn, fd) PGconn * conn int fd ALIAS: PQlo_tell = 1intlo_unlink(conn, lobjId) PGconn * conn Oid lobjId ALIAS: PQlo_unlink = 1Oidlo_import(conn, filename) PGconn * conn char * filename ALIAS: PQlo_import = 1intlo_export(conn, lobjId, filename) PGconn * conn Oid lobjId char * filename ALIAS: PQlo_export = 1PG_connconnectdb(conninfo) char * conninfo CODE: /* convert dbname to lower case if not surrounded by double quotes */ char *ptr = strstr(conninfo, "dbname"); if (ptr) { ptr += 6; while (*ptr && *ptr++ != '=') { ; } while (*ptr && (*ptr == ' ' || *ptr == '\t')) { ptr++; } if (*ptr == '"') { *ptr++ = ' '; while (*ptr && *ptr != '"') { ptr++; } if (*ptr == '"') { *ptr++ = ' '; } } else { while (*ptr && *ptr != ' ' && *ptr != '\t') { *ptr = tolower(*ptr); ptr++; } } } RETVAL = PQconnectdb((const char *)conninfo); OUTPUT: RETVALPG_connsetdbLogin(pghost, pgport, pgoptions, pgtty, dbname, login, pwd) char * pghost char * pgport char * pgoptions char * pgtty char * dbname char * login char * pwd CODE: RETVAL = PQsetdbLogin(pghost, pgport, pgoptions, pgtty, dbname, login, pwd); OUTPUT: RETVALPG_connsetdb(pghost, pgport, pgoptions, pgtty, dbname) char * pghost char * pgport char * pgoptions char * pgtty char * dbname CODE: RETVAL = PQsetdb(pghost, pgport, pgoptions, pgtty, dbname); OUTPUT: RETVALHV *conndefaults() CODE: PQconninfoOption *infoOption; RETVAL = newHV(); if (infoOption = PQconndefaults()) { while (infoOption->keyword != NULL) { if (infoOption->val != NULL) { hv_store(RETVAL, infoOption->keyword, strlen(infoOption->keyword), newSVpv(infoOption->val, 0), 0); } else { hv_store(RETVAL, infoOption->keyword, strlen(infoOption->keyword), newSVpv("", 0), 0); } infoOption++; } } OUTPUT: RETVALMODULE = Pg PACKAGE = PG_conn PREFIX = PQPROTOTYPES: DISABLEvoidDESTROY(conn) PG_conn conn CODE: /* printf("DESTROY connection\n"); */ PQfinish(conn);voidPQreset(conn) PG_conn connintPQrequestCancel(conn) PG_conn connchar *PQdb(conn) PG_conn connchar *PQuser(conn) PG_conn connchar *PQpass(conn) PG_conn connchar *PQhost(conn) PG_conn connchar *PQport(conn) PG_conn connchar *PQtty(conn) PG_conn connchar *PQoptions(conn) PG_conn connConnStatusTypePQstatus(conn) PG_conn connchar *PQerrorMessage(conn) PG_conn connintPQsocket(conn) PG_conn connintPQbackendPID(conn) PG_conn connvoidPQtrace(conn, debug_port) PG_conn conn FILE * debug_portvoidPQuntrace(conn) PG_conn connPG_resultsPQexec(conn, query) PG_conn conn char * query CODE: RETVAL = (PG_results)calloc(1, sizeof(PGresults)); if (RETVAL) { RETVAL->result = PQexec((PGconn *)conn, query); if (!RETVAL->result) { RETVAL->result = PQmakeEmptyPGresult((PGconn *)conn, PGRES_FATAL_ERROR); } } OUTPUT: RETVALvoidPQnotifies(conn) PG_conn conn PREINIT: PGnotify *notify; PPCODE: notify = PQnotifies(conn); if (notify) { XPUSHs(sv_2mortal(newSVpv((char *)notify->relname, 0))); XPUSHs(sv_2mortal(newSViv(notify->be_pid))); free(notify); }intPQsendQuery(conn, query) PG_conn conn char * queryPG_resultsPQgetResult(conn) PG_conn conn CODE: RETVAL = (PG_results)calloc(1, sizeof(PGresults)); if (RETVAL) { RETVAL->result = PQgetResult((PGconn *)conn); if (!RETVAL->result) { RETVAL->result = PQmakeEmptyPGresult((PGconn *)conn, PGRES_FATAL_ERROR); } } OUTPUT: RETVALintPQisBusy(conn) PG_conn connintPQconsumeInput(conn) PG_conn connintPQgetline(conn, string, length) PREINIT: SV *bufsv = SvROK(ST(1)) ? SvRV(ST(1)) : ST(1); INPUT: PG_conn conn int length char * string = sv_grow(bufsv, length); CODE: RETVAL = PQgetline(conn, string, length); OUTPUT: RETVAL stringintPQputline(conn, string) PG_conn conn char * stringintPQgetlineAsync(conn, buffer, bufsize) PREINIT: SV *bufsv = SvROK(ST(1)) ? SvRV(ST(1)) : ST(1); INPUT: PG_conn conn int bufsize char * buffer = sv_grow(bufsv, bufsize); CODE: RETVAL = PQgetline(conn, buffer, bufsize); OUTPUT: RETVAL bufferintPQendcopy(conn) PG_conn connPG_resultsPQmakeEmptyPGresult(conn, status) PG_conn conn ExecStatusType status CODE: RETVAL = (PG_results)calloc(1, sizeof(PGresults)); if (RETVAL) { RETVAL->result = PQmakeEmptyPGresult((PGconn *)conn, status); } OUTPUT: RETVALintlo_open(conn, lobjId, mode) PG_conn conn Oid lobjId int modeintlo_close(conn, fd) PG_conn conn int fdintlo_read(conn, fd, buf, len) PREINIT: SV *bufsv = SvROK(ST(2)) ? SvRV(ST(2)) : ST(2); INPUT: PG_conn conn int fd int len char * buf = sv_grow(bufsv, len + 1); CODE: RETVAL = lo_read(conn, fd, buf, len); if (RETVAL > 0) { SvCUR_set(bufsv, RETVAL); *SvEND(bufsv) = '\0'; } OUTPUT: RETVAL bufintlo_write(conn, fd, buf, len) PG_conn conn int fd char * buf int lenintlo_lseek(conn, fd, offset, whence) PG_conn conn int fd int offset int whenceOidlo_creat(conn, mode) PG_conn conn int modeintlo_tell(conn, fd) PG_conn conn int fdintlo_unlink(conn, lobjId) PG_conn conn Oid lobjIdOidlo_import(conn, filename) PG_conn conn char * filenameintlo_export(conn, lobjId, filename) PG_conn conn Oid lobjId char * filenameMODULE = Pg PACKAGE = PG_results PREFIX = PQPROTOTYPES: DISABLEvoidDESTROY(res) PG_results res CODE: /* printf("DESTROY result\n"); */ PQclear(res->result); Safefree(res);ExecStatusTypePQresultStatus(res) PG_results res CODE: RETVAL = PQresultStatus(res->result); OUTPUT: RETVALintPQntuples(res) PG_results res CODE: RETVAL = PQntuples(res->result); OUTPUT: RETVALintPQnfields(res) PG_results res CODE: RETVAL = PQnfields(res->result); OUTPUT: RETVALintPQbinaryTuples(res) PG_results res CODE: RETVAL = PQbinaryTuples(res->result); OUTPUT: RETVALchar *PQfname(res, field_num) PG_results res int field_num CODE: RETVAL = PQfname(res->result, field_num); OUTPUT: RETVALintPQfnumber(res, field_name) PG_results res char * field_name CODE: RETVAL = PQfnumber(res->result, field_name); OUTPUT: RETVALOidPQftype(res, field_num) PG_results res int field_num CODE: RETVAL = PQftype(res->result, field_num); OUTPUT: RETVALshortPQfsize(res, field_num) PG_results res int field_num CODE: RETVAL = PQfsize(res->result, field_num); OUTPUT: RETVALintPQfmod(res, field_num) PG_results res int field_num CODE: RETVAL = PQfmod(res->result, field_num); OUTPUT: RETVALchar *PQcmdStatus(res) PG_results res CODE: RETVAL = PQcmdStatus(res->result); OUTPUT: RETVALchar *PQoidStatus(res) PG_results res CODE: RETVAL = (char *)PQoidStatus(res->result); OUTPUT: RETVALchar *PQcmdTuples(res) PG_results res CODE: RETVAL = (char *)PQcmdTuples(res->result); OUTPUT: RETVALchar *PQgetvalue(res, tup_num, field_num) PG_results res int tup_num int field_num CODE: RETVAL = PQgetvalue(res->result, tup_num, field_num); OUTPUT: RETVALintPQgetlength(res, tup_num, field_num) PG_results res int tup_num int field_num CODE: RETVAL = PQgetlength(res->result, tup_num, field_num); OUTPUT: RETVALintPQgetisnull(res, tup_num, field_num) PG_results res int tup_num int field_num CODE: RETVAL = PQgetisnull(res->result, tup_num, field_num); OUTPUT: RETVALvoidPQfetchrow(res) PG_results res PPCODE: if (res && res->result) { int cols = PQnfields(res->result); if (PQntuples(res->result) > res->row) { int col = 0; EXTEND(sp, cols); while (col < cols) { if (PQgetisnull(res->result, res->row, col)) { PUSHs(&sv_undef); } else { char *val = PQgetvalue(res->result, res->row, col); PUSHs(sv_2mortal((SV*)newSVpv(val, 0))); } ++col; } ++res->row; } }voidPQprint(res, fout, header, align, standard, html3, expanded, pager, fieldSep, tableOpt, caption, ...) FILE * fout PG_results res pqbool header pqbool align pqbool standard pqbool html3 pqbool expanded pqbool pager char * fieldSep char * tableOpt char * caption PREINIT: PQprintOpt ps; int i; CODE: ps.header = header; ps.align = align; ps.standard = standard; ps.html3 = html3; ps.expanded = expanded; ps.pager = pager; ps.fieldSep = fieldSep; ps.tableOpt = tableOpt; ps.caption = caption; Newz(0, ps.fieldName, items + 1 - 11, char*); for (i = 11; i < items; i++) { ps.fieldName[i - 11] = (char *)SvPV(ST(i), na); } PQprint(fout, res->result, &ps); Safefree(ps.fieldName);voidPQdisplayTuples(res, fp, fillAlign, fieldSep, printHeader, quiet) PG_results res FILE * fp int fillAlign char * fieldSep int printHeader int quiet CODE: PQdisplayTuples(res->result, fp, fillAlign, (const char *)fieldSep, printHeader, quiet);voidPQprintTuples(res, fout, printAttName, terseOutput, width) PG_results res FILE * fout int printAttName int terseOutput int width CODE: PQprintTuples(res->result, fout, printAttName, terseOutput, width);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -