aboutsummaryrefslogtreecommitdiff
path: root/src/bin/psql/tab-complete.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/psql/tab-complete.c')
-rw-r--r--src/bin/psql/tab-complete.c74
1 files changed, 37 insertions, 37 deletions
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index dbba754b9a0..4bec69e6156 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -1,3 +1,11 @@
+/*
+ * psql - the PostgreSQL interactive terminal
+ *
+ * Copyright 2000 by PostgreSQL Global Development Team
+ *
+ * $Header: /cvsroot/pgsql/src/bin/psql/tab-complete.c,v 1.7 2000/01/18 23:30:24 petere Exp $
+ */
+
/*-----------
This file implements a somewhat more sophisticated readline "TAB completion"
in psql. It is not intended to be AI, to replace learning SQL, or to relieve
@@ -24,7 +32,6 @@
gracefully.
-------------*/
-#include <config.h>
#include <c.h>
#include "tab-complete.h"
@@ -44,17 +51,11 @@
#include <libpq-fe.h>
#include "common.h"
-
+#include "settings.h"
#define BUF_SIZE 2048
#define ERROR_QUERY_TOO_LONG /* empty */
-/* This pointer saves the place where psql stores its own pointer to the
- currently active database connection. This is probably a less than ideal way
- of passing this around, but this way I only had to make minimal changes to
- psql.c. */
-static PGconn ** database_connection;
-
/* Forward declaration of functions */
static char ** psql_completion(char *text, int start, int end);
@@ -80,21 +81,10 @@ char * completion_info_charp; /* if you need to pass another string */
static int completion_max_records;
-static void * xmalloc(size_t length)
-{
- void *tmp = malloc(length);
- if (!tmp) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
- return tmp;
-}
-
-
/* Initialize the readline library for our purposes. */
-void initialize_readline(PGconn ** conn)
+void initialize_readline(void)
{
- rl_readline_name = "psql";
+ rl_readline_name = pset.progname;
rl_attempted_completion_function = psql_completion;
rl_special_prefixes = "()'";
@@ -103,8 +93,6 @@ void initialize_readline(PGconn ** conn)
completion_max_records = 100;
/* There is a variable rl_completion_query_items for this but apparently
it's not defined everywhere. */
-
- database_connection = conn;
}
@@ -511,7 +499,8 @@ char ** psql_completion(char *text, int start, int end)
COMPLETE_WITH_LIST(sql_commands);
else if (strcmp(prev_wd, "\\pset")==0) {
char * my_list[] = { "format", "border", "expanded", "null", "fieldsep",
- "tuples_only", "title", "tableattr", "pager", NULL };
+ "tuples_only", "title", "tableattr", "pager",
+ "recordsep", NULL };
COMPLETE_WITH_LIST(my_list);
}
else if( strcmp(prev_wd, "\\e")==0 || strcmp(prev_wd, "\\edit")==0 ||
@@ -703,7 +692,7 @@ PGresult * exec_query(char * query)
PGresult * result;
char query_buffer[BUF_SIZE];
- if (query == NULL || PQstatus(*database_connection) != CONNECTION_OK)
+ if (query == NULL || !pset.db || PQstatus(pset.db) != CONNECTION_OK)
return NULL;
#ifdef USE_ASSERT_CHECKING
assert( query[strlen(query)-1] != ';' );
@@ -714,12 +703,12 @@ PGresult * exec_query(char * query)
return NULL;
}
- result = PQexec(*database_connection, query);
+ result = PQexec(pset.db, query);
if (result != NULL && PQresultStatus(result) != PGRES_TUPLES_OK) {
-#ifdef NOT_USED
- fprintf(stderr, "\nThe completion query \"%s\" failed thus: %s\n",
- query, PQresStatus(PQresultStatus(result)));
+#if 0
+ psql_error("tab completion: %s failed - %s",
+ query, PQresStatus(PQresultStatus(result)));
#endif
PQclear(result);
result = NULL;
@@ -767,7 +756,16 @@ char * previous_word(int point, int skip) {
}
/* make a copy */
- s = (char *)xmalloc(end-start+2);
+ s = (char *)malloc(end-start+2);
+ if (!s)
+ {
+ psql_error("out of memory\n");
+ if (!pset.cur_cmd_interactive)
+ exit(EXIT_FAILURE);
+ else
+ return NULL;
+ }
+
strncpy(s, &rl_line_buffer[start], end-start+1);
s[end-start+1] = '\0';
@@ -776,11 +774,13 @@ char * previous_word(int point, int skip) {
-#ifdef NOT_USED
+#if 0
-/* Surround a string with single quotes. This works for both SQL and
- psql internal. Doesn't work so well yet.
-*/
+/*
+ * Surround a string with single quotes. This works for both SQL and
+ * psql internal. Currently disable because it is reported not to
+ * cooperate with certain versions of readline.
+ */
char * quote_file_name(char *text, int match_type, char * quote_pointer)
{
char *s;
@@ -789,7 +789,7 @@ char * quote_file_name(char *text, int match_type, char * quote_pointer)
(void)quote_pointer; /* not used */
length = strlen(text) + ( match_type==SINGLE_MATCH ? 3 : 2 );
- s = xmalloc(length);
+ s = malloc(length);
s[0] = '\'';
strcpy(s+1, text);
if (match_type==SINGLE_MATCH)
@@ -809,13 +809,13 @@ static char * dequote_file_name(char *text, char quote_char)
return xstrdup(text);
length = strlen(text);
- s = xmalloc(length-2+1);
+ s = malloc(length-2+1);
strncpy(s, text+1, length-2);
s[length] = '\0';
return s;
}
-#endif /* NOT_USED */
+#endif /* 0 */
#endif /* USE_READLINE */