Mercurial > hg > xemacs-beta
comparison modules/postgresql/postgresql.c @ 4981:4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
-------------------- ChangeLog entries follow: --------------------
modules/ChangeLog addition:
2010-02-05 Ben Wing <ben@xemacs.org>
* postgresql/postgresql.c:
* postgresql/postgresql.c (CHECK_LIVE_CONNECTION):
* postgresql/postgresql.c (Fpq_connectdb):
* postgresql/postgresql.c (Fpq_connect_start):
* postgresql/postgresql.c (Fpq_lo_import):
* postgresql/postgresql.c (Fpq_lo_export):
* ldap/eldap.c (Fldap_open):
* ldap/eldap.c (Fldap_search_basic):
* ldap/eldap.c (Fldap_add):
* ldap/eldap.c (Fldap_modify):
* ldap/eldap.c (Fldap_delete):
* canna/canna_api.c (Fcanna_initialize):
* canna/canna_api.c (Fcanna_store_yomi):
* canna/canna_api.c (Fcanna_parse):
* canna/canna_api.c (Fcanna_henkan_begin):
EXTERNAL_TO_C_STRING returns its argument instead of storing it
in a parameter, and is renamed to EXTERNAL_TO_ITEXT. Similar
things happen to related macros. See entry in src/ChangeLog.
More Mule-izing of postgresql.c. Extract out common code
between `pq-connectdb' and `pq-connect-start'. Fix places
that signal an error string using a formatted string to instead
follow the standard and have a fixed reason followed by the
particular error message stored as one of the frobs.
src/ChangeLog addition:
2010-02-05 Ben Wing <ben@xemacs.org>
* console-msw.c (write_string_to_mswindows_debugging_output):
* console-msw.c (Fmswindows_message_box):
* console-x.c (x_perhaps_init_unseen_key_defaults):
* console.c:
* database.c (dbm_get):
* database.c (dbm_put):
* database.c (dbm_remove):
* database.c (berkdb_get):
* database.c (berkdb_put):
* database.c (berkdb_remove):
* database.c (Fopen_database):
* device-gtk.c (gtk_init_device):
* device-msw.c (msprinter_init_device_internal):
* device-msw.c (msprinter_default_printer):
* device-msw.c (msprinter_init_device):
* device-msw.c (sync_printer_with_devmode):
* device-msw.c (Fmsprinter_select_settings):
* device-x.c (sanity_check_geometry_resource):
* device-x.c (Dynarr_add_validified_lisp_string):
* device-x.c (x_init_device):
* device-x.c (Fx_put_resource):
* device-x.c (Fx_valid_keysym_name_p):
* device-x.c (Fx_set_font_path):
* dialog-msw.c (push_lisp_string_as_unicode):
* dialog-msw.c (handle_directory_dialog_box):
* dialog-msw.c (handle_file_dialog_box):
* dialog-x.c (dbox_descriptor_to_widget_value):
* editfns.c (Fformat_time_string):
* editfns.c (Fencode_time):
* editfns.c (Fset_time_zone_rule):
* emacs.c (make_argc_argv):
* emacs.c (Fdump_emacs):
* emodules.c (emodules_load):
* eval.c:
* eval.c (maybe_signal_error_1):
* event-msw.c (Fdde_alloc_advise_item):
* event-msw.c (mswindows_dde_callback):
* event-msw.c (mswindows_wnd_proc):
* fileio.c (report_error_with_errno):
* fileio.c (Fsysnetunam):
* fileio.c (Fdo_auto_save):
* font-mgr.c (extract_fcapi_string):
* font-mgr.c (Ffc_config_app_font_add_file):
* font-mgr.c (Ffc_config_app_font_add_dir):
* font-mgr.c (Ffc_config_filename):
* frame-gtk.c (gtk_set_frame_text_value):
* frame-gtk.c (gtk_create_widgets):
* frame-msw.c (mswindows_init_frame_1):
* frame-msw.c (mswindows_set_title_from_ibyte):
* frame-msw.c (msprinter_init_frame_3):
* frame-x.c (x_set_frame_text_value):
* frame-x.c (x_set_frame_properties):
* frame-x.c (start_drag_internal_1):
* frame-x.c (x_cde_transfer_callback):
* frame-x.c (x_create_widgets):
* glyphs-eimage.c (my_jpeg_output_message):
* glyphs-eimage.c (jpeg_instantiate):
* glyphs-eimage.c (gif_instantiate):
* glyphs-eimage.c (png_instantiate):
* glyphs-eimage.c (tiff_instantiate):
* glyphs-gtk.c (xbm_instantiate_1):
* glyphs-gtk.c (gtk_xbm_instantiate):
* glyphs-gtk.c (gtk_xpm_instantiate):
* glyphs-gtk.c (gtk_xface_instantiate):
* glyphs-gtk.c (cursor_font_instantiate):
* glyphs-gtk.c (gtk_redisplay_widget):
* glyphs-gtk.c (gtk_widget_instantiate_1):
* glyphs-gtk.c (gtk_add_tab_item):
* glyphs-msw.c (mswindows_xpm_instantiate):
* glyphs-msw.c (bmp_instantiate):
* glyphs-msw.c (mswindows_resource_instantiate):
* glyphs-msw.c (xbm_instantiate_1):
* glyphs-msw.c (mswindows_xbm_instantiate):
* glyphs-msw.c (mswindows_xface_instantiate):
* glyphs-msw.c (mswindows_redisplay_widget):
* glyphs-msw.c (mswindows_widget_instantiate):
* glyphs-msw.c (add_tree_item):
* glyphs-msw.c (add_tab_item):
* glyphs-msw.c (mswindows_combo_box_instantiate):
* glyphs-msw.c (mswindows_widget_query_string_geometry):
* glyphs-x.c (x_locate_pixmap_file):
* glyphs-x.c (xbm_instantiate_1):
* glyphs-x.c (x_xbm_instantiate):
* glyphs-x.c (extract_xpm_color_names):
* glyphs-x.c (x_xpm_instantiate):
* glyphs-x.c (x_xface_instantiate):
* glyphs-x.c (autodetect_instantiate):
* glyphs-x.c (safe_XLoadFont):
* glyphs-x.c (cursor_font_instantiate):
* glyphs-x.c (x_redisplay_widget):
* glyphs-x.c (Fchange_subwindow_property):
* glyphs-x.c (x_widget_instantiate):
* glyphs-x.c (x_tab_control_redisplay):
* glyphs.c (pixmap_to_lisp_data):
* gui-x.c (menu_separator_style_and_to_external):
* gui-x.c (add_accel_and_to_external):
* gui-x.c (button_item_to_widget_value):
* hpplay.c (player_error_internal):
* hpplay.c (play_sound_file):
* hpplay.c (play_sound_data):
* intl.c (Fset_current_locale):
* lisp.h:
* menubar-gtk.c (gtk_xemacs_set_accel_keys):
* menubar-msw.c (populate_menu_add_item):
* menubar-msw.c (populate_or_checksum_helper):
* menubar-x.c (menu_item_descriptor_to_widget_value_1):
* nt.c (init_user_info):
* nt.c (get_long_basename):
* nt.c (nt_get_resource):
* nt.c (init_mswindows_environment):
* nt.c (get_cached_volume_information):
* nt.c (mswindows_readdir):
* nt.c (read_unc_volume):
* nt.c (mswindows_stat):
* nt.c (mswindows_getdcwd):
* nt.c (mswindows_executable_type):
* nt.c (Fmswindows_short_file_name):
* ntplay.c (nt_play_sound_file):
* objects-gtk.c:
* objects-gtk.c (gtk_valid_color_name_p):
* objects-gtk.c (gtk_initialize_font_instance):
* objects-gtk.c (gtk_font_list):
* objects-msw.c (font_enum_callback_2):
* objects-msw.c (parse_font_spec):
* objects-x.c (x_parse_nearest_color):
* objects-x.c (x_valid_color_name_p):
* objects-x.c (x_initialize_font_instance):
* objects-x.c (x_font_instance_truename):
* objects-x.c (x_font_list):
* objects-xlike-inc.c (XFUN):
* objects-xlike-inc.c (xft_find_charset_font):
* process-nt.c (mswindows_report_winsock_error):
* process-nt.c (nt_create_process):
* process-nt.c (get_internet_address):
* process-nt.c (nt_open_network_stream):
* process-unix.c:
* process-unix.c (allocate_pty):
* process-unix.c (get_internet_address):
* process-unix.c (unix_canonicalize_host_name):
* process-unix.c (unix_open_network_stream):
* realpath.c:
* select-common.h (lisp_data_to_selection_data):
* select-gtk.c (symbol_to_gtk_atom):
* select-gtk.c (atom_to_symbol):
* select-msw.c (symbol_to_ms_cf):
* select-msw.c (mswindows_register_selection_data_type):
* select-x.c (symbol_to_x_atom):
* select-x.c (x_atom_to_symbol):
* select-x.c (hack_motif_clipboard_selection):
* select-x.c (Fx_store_cutbuffer_internal):
* sound.c (Fplay_sound_file):
* sound.c (Fplay_sound):
* sound.h (sound_perror):
* sysdep.c:
* sysdep.c (qxe_allocating_getcwd):
* sysdep.c (qxe_execve):
* sysdep.c (copy_in_passwd):
* sysdep.c (qxe_getpwnam):
* sysdep.c (qxe_ctime):
* sysdll.c (dll_open):
* sysdll.c (dll_function):
* sysdll.c (dll_variable):
* sysdll.c (search_linked_libs):
* sysdll.c (dll_error):
* sysfile.h:
* sysfile.h (PATHNAME_CONVERT_OUT_TSTR):
* sysfile.h (PATHNAME_CONVERT_OUT_UTF_8):
* sysfile.h (PATHNAME_CONVERT_OUT):
* sysfile.h (LISP_PATHNAME_CONVERT_OUT):
* syswindows.h (ITEXT_TO_TSTR):
* syswindows.h (LOCAL_FILE_FORMAT_TO_TSTR):
* syswindows.h (TSTR_TO_LOCAL_FILE_FORMAT):
* syswindows.h (LOCAL_FILE_FORMAT_TO_INTERNAL_MSWIN):
* syswindows.h (LISP_LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR):
* text.h:
* text.h (eicpy_ext_len):
* text.h (enum new_dfc_src_type):
* text.h (EXTERNAL_TO_ITEXT):
* text.h (GET_STRERROR):
* tooltalk.c (check_status):
* tooltalk.c (Fadd_tooltalk_message_arg):
* tooltalk.c (Fadd_tooltalk_pattern_attribute):
* tooltalk.c (Fadd_tooltalk_pattern_arg):
* win32.c (tstr_to_local_file_format):
* win32.c (mswindows_lisp_error_1):
* win32.c (mswindows_report_process_error):
* win32.c (Fmswindows_shell_execute):
* win32.c (mswindows_read_link_1):
Changes involving external/internal format conversion,
mostly code cleanup and renaming.
1. Eliminate the previous macros like LISP_STRING_TO_EXTERNAL
that stored its result in a parameter. The new version of
LISP_STRING_TO_EXTERNAL returns its result through the
return value, same as the previous NEW_LISP_STRING_TO_EXTERNAL.
Use the new-style macros throughout the code.
2. Rename C_STRING_TO_EXTERNAL and friends to ITEXT_TO_EXTERNAL,
in keeping with overall naming rationalization involving
Itext and related types.
Macros involved in previous two:
EXTERNAL_TO_C_STRING -> EXTERNAL_TO_ITEXT
EXTERNAL_TO_C_STRING_MALLOC -> EXTERNAL_TO_ITEXT_MALLOC
SIZED_EXTERNAL_TO_C_STRING -> SIZED_EXTERNAL_TO_ITEXT
SIZED_EXTERNAL_TO_C_STRING_MALLOC -> SIZED_EXTERNAL_TO_ITEXT_MALLOC
C_STRING_TO_EXTERNAL -> ITEXT_TO_EXTERNAL
C_STRING_TO_EXTERNAL_MALLOC -> ITEXT_TO_EXTERNAL_MALLOC
LISP_STRING_TO_EXTERNAL
LISP_STRING_TO_EXTERNAL_MALLOC
LISP_STRING_TO_TSTR
C_STRING_TO_TSTR -> ITEXT_TO_TSTR
TSTR_TO_C_STRING -> TSTR_TO_ITEXT
The following four still return their values through parameters,
since they have more than one value to return:
C_STRING_TO_SIZED_EXTERNAL -> ITEXT_TO_SIZED_EXTERNAL
LISP_STRING_TO_SIZED_EXTERNAL
C_STRING_TO_SIZED_EXTERNAL_MALLOC -> ITEXT_TO_SIZED_EXTERNAL_MALLOC
LISP_STRING_TO_SIZED_EXTERNAL_MALLOC
Sometimes additional casts had to be inserted, since the old
macros played strange games and completely defeated the type system
of the store params.
3. Rewrite many places where direct calls to TO_EXTERNAL_FORMAT
occurred with calls to one of the convenience macros listed above,
or to make_extstring().
4. Eliminate SIZED_C_STRING macros (they were hardly used, anyway)
and use a direct call to TO_EXTERNAL_FORMAT or TO_INTERNAL_FORMAT.
4. Use LISP_PATHNAME_CONVERT_OUT in many places instead of something
like LISP_STRING_TO_EXTERNAL(..., Qfile_name).
5. Eliminate some temporary variables that are no longer necessary
now that we return a value rather than storing it into a variable.
6. Some Mule-izing in database.c.
7. Error functions:
-- A bit of code cleanup in maybe_signal_error_1.
-- Eliminate report_file_type_error; it's just an alias for
signal_error_2 with params in a different order.
-- Fix some places in the hostname-handling code that directly
inserted externally-retrieved error strings into the
supposed ASCII "reason" param instead of doing the right thing
and sticking text descriptive of what was going on in "reason"
and putting the external message in a frob.
8. Use Ascbyte instead of CIbyte in process-unix.c and maybe one
or two other places.
9. Some code cleanup in copy_in_passwd() in sysdep.c.
10. Fix a real bug due to accidental variable shadowing in
tstr_to_local_file_format() in win32.c.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Fri, 05 Feb 2010 11:02:24 -0600 |
parents | 304aebb79cd3 |
children | b5df3737028a |
comparison
equal
deleted
inserted
replaced
4972:c448f4c38d65 | 4981:4aebb0131297 |
---|---|
95 #endif | 95 #endif |
96 | 96 |
97 /* #define POSTGRES_LO_IMPORT_IS_VOID 1 */ | 97 /* #define POSTGRES_LO_IMPORT_IS_VOID 1 */ |
98 | 98 |
99 #include "lisp.h" | 99 #include "lisp.h" |
100 #include "sysdep.h" | |
101 | 100 |
102 #include "buffer.h" | 101 #include "buffer.h" |
103 #include "postgresql.h" | 102 #include "postgresql.h" |
104 #include "process.h" | 103 #include "process.h" |
105 #ifdef HAVE_SHLIB | 104 #ifdef HAVE_SHLIB |
106 # include "emodules.h" | 105 # include "emodules.h" |
107 #endif | 106 #endif |
107 #include "sysdep.h" | |
108 #include "sysfile.h" | |
108 | 109 |
109 #ifdef RUNNING_XEMACS_21_1 /* handle interface changes */ | 110 #ifdef RUNNING_XEMACS_21_1 /* handle interface changes */ |
110 #define PG_OS_CODING FORMAT_FILENAME | 111 #define PG_OS_CODING FORMAT_FILENAME |
111 #define TO_EXTERNAL_FORMAT(a,from,b,to,c) GET_C_STRING_EXT_DATA_ALLOCA(from,FORMAT_FILENAME,to) | 112 #define TO_EXTERNAL_FORMAT(a,from,b,to,c) GET_C_STRING_EXT_DATA_ALLOCA(from,FORMAT_FILENAME,to) |
112 #else | 113 #else |
121 #define CHECK_LIVE_CONNECTION(P) \ | 122 #define CHECK_LIVE_CONNECTION(P) \ |
122 do \ | 123 do \ |
123 { \ | 124 { \ |
124 if (!P || (PQstatus (P) != CONNECTION_OK)) \ | 125 if (!P || (PQstatus (P) != CONNECTION_OK)) \ |
125 { \ | 126 { \ |
126 const Ibyte *err; \ | 127 Lisp_Object err; \ |
127 \ | 128 \ |
128 if (P) \ | 129 if (P) \ |
129 err = NEW_EXTERNAL_TO_C_STRING (PQerrorMessage (P), PG_OS_CODING); \ | 130 err = build_extstring (PQerrorMessage (P), PG_OS_CODING); \ |
130 else \ | 131 else \ |
131 err = (const Ibyte *) "bad value"; \ | 132 err = build_msg_string ("Bad value"); \ |
132 signal_ferror (Qprocess_error, "dead connection [%s]", err); \ | 133 signal_error (Qprocess_error, "Dead connection", err); \ |
133 } \ | 134 } \ |
134 } \ | 135 } \ |
135 while (0) | 136 while (0) |
136 | 137 |
137 #define PUKE_IF_NULL(p) \ | 138 #define PUKE_IF_NULL(p) \ |
138 do \ | 139 do \ |
139 { \ | 140 { \ |
140 if (!p) signal_error (Qinvalid_argument, "bad value", Qunbound); \ | 141 if (!p) signal_error (Qinvalid_argument, "Bad value", Qunbound); \ |
141 } \ | 142 } \ |
142 while (0) | 143 while (0) |
144 | |
145 #define SIGNAL_ERROR(p, reason) \ | |
146 do \ | |
147 { \ | |
148 signal_error (Qprocess_error, reason, \ | |
149 build_extstring (PQerrorMessage (p), PG_OS_CODING)); \ | |
150 } \ | |
151 while (0) | |
143 | 152 |
144 static Lisp_Object VXPGHOST; | 153 static Lisp_Object VXPGHOST; |
145 static Lisp_Object VXPGUSER; | 154 static Lisp_Object VXPGUSER; |
146 static Lisp_Object VXPGOPTIONS; | 155 static Lisp_Object VXPGOPTIONS; |
147 static Lisp_Object VXPGPORT; | 156 static Lisp_Object VXPGPORT; |
477 | 486 |
478 /* PQconnectdb Makes a new connection to a backend. | 487 /* PQconnectdb Makes a new connection to a backend. |
479 PGconn *PQconnectdb(const char *conninfo) | 488 PGconn *PQconnectdb(const char *conninfo) |
480 */ | 489 */ |
481 | 490 |
482 /* ###autoload */ | 491 #ifdef HAVE_POSTGRESQLV7 |
483 DEFUN ("pq-connectdb", Fpq_connectdb, 1, 1, 0, /* | 492 #define USED_IF_V7(x) x |
484 Make a new connection to a PostgreSQL backend. | 493 #else |
485 */ | 494 #define USED_IF_V7(x) UNUSED (x) |
486 (conninfo)) | 495 #endif |
496 | |
497 static Lisp_Object | |
498 postgresql_connect (Lisp_Object conninfo, int USED_IF_V7 (async)) | |
487 { | 499 { |
488 PGconn *P; | 500 PGconn *P; |
489 Lisp_PGconn *lisp_pgconn; | 501 Lisp_PGconn *lisp_pgconn; |
490 const Ascbyte *error_message = "Out of Memory?"; | |
491 Extbyte *c_conninfo; | |
492 | 502 |
493 CHECK_STRING (conninfo); | 503 CHECK_STRING (conninfo); |
494 | 504 |
495 LISP_STRING_TO_EXTERNAL (conninfo, c_conninfo, PG_OS_CODING); | 505 P = ( |
496 P = PQconnectdb (c_conninfo); | 506 #ifdef HAVE_POSTGRESQLV7 |
507 async ? PQconnectStart : | |
508 #endif | |
509 PQconnectdb) | |
510 (LISP_STRING_TO_EXTERNAL (conninfo, PG_OS_CODING)); | |
497 if (P && (PQstatus (P) == CONNECTION_OK)) | 511 if (P && (PQstatus (P) == CONNECTION_OK)) |
498 { | 512 { |
499 (void)PQsetNoticeProcessor (P, xemacs_notice_processor, NULL); | 513 (void) PQsetNoticeProcessor (P, xemacs_notice_processor, NULL); |
500 lisp_pgconn = allocate_pgconn (); | 514 lisp_pgconn = allocate_pgconn (); |
501 lisp_pgconn->pgconn = P; | 515 lisp_pgconn->pgconn = P; |
502 return make_pgconn (lisp_pgconn); | 516 return make_pgconn (lisp_pgconn); |
503 } | 517 } |
504 else | 518 else |
505 { | 519 { |
506 /* Connection failed. Destroy the connection and signal an error. */ | 520 /* Connection failed. Destroy the connection and signal an error. */ |
507 Ibyte *errmsg = (Ibyte *) error_message; | 521 |
522 Lisp_Object errmsg; | |
508 if (P) | 523 if (P) |
509 { | 524 { |
510 /* storage for the error message gets erased when call PQfinish */ | 525 errmsg = build_extstring (PQerrorMessage (P), PG_OS_CODING); |
511 /* so we must temporarily stash it somewhere -- make alloca() copy */ | |
512 errmsg = NEW_EXTERNAL_TO_C_STRING (PQerrorMessage (P), PG_OS_CODING); | |
513 IBYTE_STRING_TO_ALLOCA (errmsg, errmsg); | |
514 PQfinish (P); | 526 PQfinish (P); |
515 } | 527 } |
516 signal_ferror (Qprocess_error, "libpq: %s", errmsg); | 528 else |
529 errmsg = build_msg_string ("Out of Memory?"); | |
530 signal_error (Qprocess_error, "Connecting to PostGreSQL backend", | |
531 errmsg); | |
517 } | 532 } |
533 } | |
534 | |
535 /* ###autoload */ | |
536 DEFUN ("pq-connectdb", Fpq_connectdb, 1, 1, 0, /* | |
537 Make a new connection to a PostgreSQL backend. | |
538 */ | |
539 (conninfo)) | |
540 { | |
541 return postgresql_connect (conninfo, 0); | |
518 } | 542 } |
519 | 543 |
520 /* PQconnectStart Makes a new asynchronous connection to a backend. | 544 /* PQconnectStart Makes a new asynchronous connection to a backend. |
521 PGconn *PQconnectStart(const char *conninfo) | 545 PGconn *PQconnectStart(const char *conninfo) |
522 */ | 546 */ |
526 DEFUN ("pq-connect-start", Fpq_connect_start, 1, 1, 0, /* | 550 DEFUN ("pq-connect-start", Fpq_connect_start, 1, 1, 0, /* |
527 Make a new asynchronous connection to a PostgreSQL backend. | 551 Make a new asynchronous connection to a PostgreSQL backend. |
528 */ | 552 */ |
529 (conninfo)) | 553 (conninfo)) |
530 { | 554 { |
531 PGconn *P; | 555 return postgresql_connect (conninfo, 1); |
532 Lisp_PGconn *lisp_pgconn; | |
533 const Ascbyte *error_message = "Out of Memory?"; | |
534 Extbyte *c_conninfo; | |
535 | |
536 CHECK_STRING (conninfo); | |
537 | |
538 LISP_STRING_TO_EXTERNAL (conninfo, c_conninfo, PG_OS_CODING); | |
539 P = PQconnectStart (c_conninfo); | |
540 | |
541 if (P && (PQstatus (P) != CONNECTION_BAD)) | |
542 { | |
543 (void)PQsetNoticeProcessor (P, xemacs_notice_processor, NULL); | |
544 lisp_pgconn = allocate_pgconn (); | |
545 lisp_pgconn->pgconn = P; | |
546 | |
547 return make_pgconn (lisp_pgconn); | |
548 } | |
549 else | |
550 { | |
551 /* capture the error message before destroying the object */ | |
552 char buf[BLCKSZ]; | |
553 strcpy (buf, error_message); | |
554 if (P) | |
555 { | |
556 strncpy (buf, PQerrorMessage (P), sizeof (buf)); | |
557 buf[sizeof (buf) - 1] = '\0'; | |
558 PQfinish (P); | |
559 } | |
560 signal_ferror (Qprocess_error, "libpq: %s", buf); | |
561 } | |
562 } | 556 } |
563 | 557 |
564 DEFUN ("pq-connect-poll", Fpq_connect_poll, 1, 1, 0, /* | 558 DEFUN ("pq-connect-poll", Fpq_connect_poll, 1, 1, 0, /* |
565 Poll an asynchronous connection for completion | 559 Poll an asynchronous connection for completion |
566 */ | 560 */ |
577 polling_status = PQconnectPoll (P); | 571 polling_status = PQconnectPoll (P); |
578 switch (polling_status) | 572 switch (polling_status) |
579 { | 573 { |
580 case PGRES_POLLING_FAILED: | 574 case PGRES_POLLING_FAILED: |
581 /* Something Bad has happened */ | 575 /* Something Bad has happened */ |
582 { | 576 SIGNAL_ERROR (P, "Polling asynchronous connection"); |
583 char *e = PQerrorMessage (P); | |
584 signal_ferror (Qprocess_error, "libpq: %s", e); | |
585 } | |
586 case PGRES_POLLING_OK: | 577 case PGRES_POLLING_OK: |
587 return Qpgres_polling_ok; | 578 return Qpgres_polling_ok; |
588 case PGRES_POLLING_READING: | 579 case PGRES_POLLING_READING: |
589 return Qpgres_polling_reading; | 580 return Qpgres_polling_reading; |
590 case PGRES_POLLING_WRITING: | 581 case PGRES_POLLING_WRITING: |
743 CHECK_PGCONN (conn); | 734 CHECK_PGCONN (conn); |
744 P = (XPGCONN (conn))->pgconn; | 735 P = (XPGCONN (conn))->pgconn; |
745 CHECK_LIVE_CONNECTION (P); | 736 CHECK_LIVE_CONNECTION (P); |
746 | 737 |
747 if (PQresetStart (P)) return Qt; | 738 if (PQresetStart (P)) return Qt; |
748 { | 739 SIGNAL_ERROR (P, "Resetting connection"); |
749 char *e = PQerrorMessage (P); | |
750 signal_ferror (Qprocess_error, "libpq: %s", e); | |
751 } | |
752 } | 740 } |
753 | 741 |
754 DEFUN ("pq-reset-poll", Fpq_reset_poll, 1, 1, 0, /* | 742 DEFUN ("pq-reset-poll", Fpq_reset_poll, 1, 1, 0, /* |
755 Poll an asynchronous reset for completion. | 743 Poll an asynchronous reset for completion. |
756 */ | 744 */ |
766 | 754 |
767 polling_status = PQresetPoll (P); | 755 polling_status = PQresetPoll (P); |
768 switch (polling_status) | 756 switch (polling_status) |
769 { | 757 { |
770 case PGRES_POLLING_FAILED: | 758 case PGRES_POLLING_FAILED: |
771 /* Something Bad has happened */ | 759 SIGNAL_ERROR (P, "Polling asynchronous reset"); |
772 { | |
773 char *e = PQerrorMessage (P); | |
774 signal_ferror (Qprocess_error, "libpq: %s", e); | |
775 } | |
776 case PGRES_POLLING_OK: | 760 case PGRES_POLLING_OK: |
777 return Qpgres_polling_ok; | 761 return Qpgres_polling_ok; |
778 case PGRES_POLLING_READING: | 762 case PGRES_POLLING_READING: |
779 return Qpgres_polling_reading; | 763 return Qpgres_polling_reading; |
780 case PGRES_POLLING_WRITING: | 764 case PGRES_POLLING_WRITING: |
982 | 966 |
983 TO_EXTERNAL_FORMAT (LISP_STRING, query, | 967 TO_EXTERNAL_FORMAT (LISP_STRING, query, |
984 C_STRING_ALLOCA, c_query, Qnative); | 968 C_STRING_ALLOCA, c_query, Qnative); |
985 | 969 |
986 if (PQsendQuery (P, c_query)) return Qt; | 970 if (PQsendQuery (P, c_query)) return Qt; |
987 else signal_ferror (Qprocess_error, "async query: %s", PQerrorMessage (P)); | 971 else SIGNAL_ERROR (P, "Sending asynchronous query"); |
988 } | 972 } |
989 | 973 |
990 DEFUN ("pq-get-result", Fpq_get_result, 1, 1, 0, /* | 974 DEFUN ("pq-get-result", Fpq_get_result, 1, 1, 0, /* |
991 Retrieve an asynchronous result from a query. | 975 Retrieve an asynchronous result from a query. |
992 NIL is returned when no more query work remains. | 976 NIL is returned when no more query work remains. |
1420 CHECK_STRING (filename); | 1404 CHECK_STRING (filename); |
1421 | 1405 |
1422 P = (XPGCONN (conn))->pgconn; | 1406 P = (XPGCONN (conn))->pgconn; |
1423 CHECK_LIVE_CONNECTION (P); | 1407 CHECK_LIVE_CONNECTION (P); |
1424 | 1408 |
1425 TO_EXTERNAL_FORMAT (LISP_STRING, filename, | 1409 LISP_PATHNAME_CONVERT_OUT (filename, c_filename); |
1426 C_STRING_ALLOCA, c_filename, | |
1427 Qfile_name); | |
1428 | 1410 |
1429 return make_int ((int)lo_import (P, c_filename)); | 1411 return make_int ((int)lo_import (P, c_filename)); |
1430 } | 1412 } |
1431 | 1413 |
1432 DEFUN ("pq-lo-export", Fpq_lo_export, 3, 3, 0, /* | 1414 DEFUN ("pq-lo-export", Fpq_lo_export, 3, 3, 0, /* |
1441 CHECK_STRING (filename); | 1423 CHECK_STRING (filename); |
1442 | 1424 |
1443 P = (XPGCONN (conn))->pgconn; | 1425 P = (XPGCONN (conn))->pgconn; |
1444 CHECK_LIVE_CONNECTION (P); | 1426 CHECK_LIVE_CONNECTION (P); |
1445 | 1427 |
1446 TO_EXTERNAL_FORMAT (LISP_STRING, filename, | 1428 LISP_PATHNAME_CONVERT_OUT (filename, c_filename); |
1447 C_STRING_ALLOCA, c_filename, Qfile_name); | |
1448 | 1429 |
1449 return make_int ((int)lo_export (P, XINT (oid), c_filename)); | 1430 return make_int ((int)lo_export (P, XINT (oid), c_filename)); |
1450 } | 1431 } |
1451 | 1432 |
1452 DEFUN ("pq-make-empty-pgresult", Fpq_make_empty_pgresult, 2, 2, 0, /* | 1433 DEFUN ("pq-make-empty-pgresult", Fpq_make_empty_pgresult, 2, 2, 0, /* |