summaryrefslogtreecommitdiff
path: root/contrib/dbase
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-09-05 17:20:29 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-09-05 17:20:29 +0000
commitaf7d257e21aae3d75c46977482309b658b3a29d7 (patch)
treecf93e41a5d1c182cc80f5c9122bd34a3d52caf20 /contrib/dbase
parenta3242fb42cc2b85581a195aa72cf72a1df94b78f (diff)
downloadpostgresql-af7d257e21aae3d75c46977482309b658b3a29d7.tar.gz
Remove contrib modules that have been migrated to pgfoundry: adddepend,
dbase, dbmirror, fulltextindex, mac, userlock; or abandoned: mSQL-interface, tips.
Diffstat (limited to 'contrib/dbase')
-rw-r--r--contrib/dbase/Makefile26
-rw-r--r--contrib/dbase/README.dbf2pg139
-rw-r--r--contrib/dbase/dbf.c520
-rw-r--r--contrib/dbase/dbf.h142
-rw-r--r--contrib/dbase/dbf2pg.1118
-rw-r--r--contrib/dbase/dbf2pg.c839
-rw-r--r--contrib/dbase/endian.c50
7 files changed, 0 insertions, 1834 deletions
diff --git a/contrib/dbase/Makefile b/contrib/dbase/Makefile
deleted file mode 100644
index 898ec897e9..0000000000
--- a/contrib/dbase/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-# $PostgreSQL: pgsql/contrib/dbase/Makefile,v 1.8 2005/09/27 17:13:01 tgl Exp $
-
-PROGRAM = dbf2pg
-OBJS = dbf.o dbf2pg.o endian.o
-PG_CPPFLAGS = -I$(libpq_srcdir)
-PG_LIBS = $(libpq_pgport)
-
-# Uncomment this to provide charset translation
-#PG_CPPFLAGS += -DHAVE_ICONV_H
-# You might need to uncomment this too, if libiconv is a separate
-# library on your platform
-#PG_LIBS += -liconv
-
-DOCS = README.dbf2pg
-MAN = dbf2pg.1 # XXX not implemented
-
-
-ifdef USE_PGXS
-PGXS := $(shell pg_config --pgxs)
-include $(PGXS)
-else
-subdir = contrib/dbase
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/contrib/dbase/README.dbf2pg b/contrib/dbase/README.dbf2pg
deleted file mode 100644
index 7154819655..0000000000
--- a/contrib/dbase/README.dbf2pg
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-dbf2sql(1L) dbf2sql(1L)
-
-
-NAME
- dbf2sql - Insert xBase-style .dbf-files into a Post-
- greSQL-table
-
-SYNOPSIS
- "dbf2pg [options] dbf-file"
- Options:
- [-v[v]] [-f] [-u | -l] [-c | -D] [-d database] [-t table]
- [-h host] [-s oldname=[newname][,oldname=[newname]]] [-b
- start] [-e end] [-W] [-U username] [-B transaction_size]
- [-F charset_from [-T charset_to]]
-
-
-DESCRIPTION
- This manual page documents the program dbf2pg. It takes
- an xBase-style .dbf-file, and inserts it into the speci-
- fied database and table.
-
- OPTIONS
- -v Display some status-messages.
-
- -vv Also display progress.
-
- -f Convert all field-names from the .dbf-file to low-
- ercase.
-
- -u Convert the contents of all fields to uppercase.
-
- -l Convert the contents of all fields to lowercase.
-
- -c Create the table specified with -t. If this table
- already exists, first DROP it.
-
- -D Delete the contents of the table specified with -t.
- Note that this table has to exists. An error is
- returned if this is not the case.
-
- -W Ask for password.
-
- -d database
- Specify the database to use. An error is returned
- if this database does not exists. Default is
- "test".
-
- -t table
- Specify the table to insert in. An error is
- returned if this table does not exists. Default is
- "test".
-
- -h host
- Specify the host to which to connect. Default is
- "localhost".
-
-
-
-
-
- 1
-
-
-
-
-
-dbf2sql(1L) dbf2sql(1L)
-
-
- -s oldname=[newname][,oldname=[newname]]
- Change the name of a field from oldname to newname.
- This is mainly used to avoid using reserved SQL-
- keywords. When the new fieldname is empty, the field
- is skipped in both the CREATE-clause and the
- INSERT-clauses, in common words: it will not be present
- in the SQL-table.
- Example:
- -s SELECT=SEL,remark=,COMMIT=doit
- This is done before the -f operator has taken
- effect!
-
- -b start
- Specify the first record-number in the xBase-file
- we will insert.
-
- -e end Specify the last record-number in the xBase-file we
- will insert.
-
- -B transaction_size
- Specify the number of records per transaction,
- default is all records.
-
- -U username
- Log as the specified user in the database.
-
- -F charset_from
- If specified, it converts the data from the speci-
- fied charset. Example:
- -F IBM437
- Consult your system documentation to see the con-
- versions available. This requires iconv to be enabled
- in the compile.
-
- -T charset_to
- Together with -F charset_from , it converts the
- data to the specified charset. Default is
- "ISO-8859-1". This requires iconv to be enabled
- in the compile.
-
-ENVIRONMENT
- This program is affected by the environment-variables as
- used by "PostgresSQL." See the documentation of Post-
- gresSQL for more info. This program can optionally use iconv
- character set conversion routines.
-
-BUGS
- Fields larger than 8192 characters are not supported and
- could break the program.
- Some charset convertions could cause the output to be
- larger than the input and could break the program.
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2
-
-
diff --git a/contrib/dbase/dbf.c b/contrib/dbase/dbf.c
deleted file mode 100644
index f202213b11..0000000000
--- a/contrib/dbase/dbf.c
+++ /dev/null
@@ -1,520 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/dbase/dbf.c,v 1.11 2006/06/08 03:28:01 momjian Exp $ */
-
-/* Routines to read and write xBase-files (.dbf)
-
- By Maarten Boekhold, 29th of oktober 1995
-
- Modified by Frank Koormann (fkoorman@usf.uni-osnabrueck.de), Jun 10 1996
- prepare dataarea with memset
- get systemtime and set filedate
- set formatstring for real numbers
-*/
-
-#include "postgres_fe.h"
-
-#include <fcntl.h>
-#include <ctype.h>
-#include <time.h>
-#include <unistd.h>
-
-#include "dbf.h"
-
-/* open a dbf-file, get it's field-info and store this information */
-
-dbhead *
-dbf_open(char *file, int flags)
-{
- int file_no;
- dbhead *dbh;
- f_descr *fields;
- dbf_header *head;
- dbf_field *fieldc;
- int t;
-
- if ((dbh = (dbhead *) malloc(sizeof(dbhead))) == NULL)
- return (dbhead *) DBF_ERROR;
-
- if ((head = (dbf_header *) malloc(sizeof(dbf_header))) == NULL)
- {
- free(dbh);
- return (dbhead *) DBF_ERROR;
- }
-
- if ((fieldc = (dbf_field *) malloc(sizeof(dbf_field))) == NULL)
- {
- free(head);
- free(dbh);
- return (dbhead *) DBF_ERROR;
- }
-
- if ((file_no = open(file, flags, 0)) == -1)
- {
- free(fieldc);
- free(head);
- free(dbh);
- return (dbhead *) DBF_ERROR;
- }
-
-/* read in the disk-header */
-
- if (read(file_no, head, sizeof(dbf_header)) == -1)
- {
- close(file_no);
- free(fieldc);
- free(head);
- free(dbh);
- return (dbhead *) DBF_ERROR;
- }
-
- if (!(head->dbh_dbt & DBH_NORMAL))
- {
- close(file_no);
- free(fieldc);
- free(head);
- free(dbh);
- return (dbhead *) DBF_ERROR;
- }
-
- dbh->db_fd = file_no;
- if (head->dbh_dbt & DBH_MEMO)
- dbh->db_memo = 1;
- else
- dbh->db_memo = 0;
- dbh->db_year = head->dbh_year;
- dbh->db_month = head->dbh_month;
- dbh->db_day = head->dbh_day;
- dbh->db_hlen = get_short((u_char *) &head->dbh_hlen);
- dbh->db_records = get_long((u_char *) &head->dbh_records);
- dbh->db_currec = 0;
- dbh->db_rlen = get_short((u_char *) &head->dbh_rlen);
- dbh->db_nfields = (dbh->db_hlen - sizeof(dbf_header)) / sizeof(dbf_field);
-
- /*
- * dbh->db_hlen - sizeof(dbf_header) isn't the correct size, cos dbh->hlen
- * is in fact a little more cos of the 0x0D (and possibly another byte,
- * 0x4E, I have seen this somewhere). Because of rounding everything turns
- * out right :)
- */
-
- if ((fields = (f_descr *) calloc(dbh->db_nfields, sizeof(f_descr)))
- == NULL)
- {
- close(file_no);
- free(fieldc);
- free(head);
- free(dbh);
- return (dbhead *) DBF_ERROR;
- }
-
- for (t = 0; t < dbh->db_nfields; t++)
- {
-/* Maybe I have calculated the number of fields incorrectly. This can happen
- when programs reserve lots of space at the end of the header for future
- expansion. This will catch this situation */
- if (fields[t].db_name[0] == 0x0D)
- {
- dbh->db_nfields = t;
- break;
- }
- read(file_no, fieldc, sizeof(dbf_field));
- strncpy(fields[t].db_name, fieldc->dbf_name, DBF_NAMELEN);
- fields[t].db_type = fieldc->dbf_type;
- fields[t].db_flen = fieldc->dbf_flen;
- fields[t].db_dec = fieldc->dbf_dec;
- }
-
- dbh->db_offset = dbh->db_hlen;
- dbh->db_fields = fields;
-
- if ((dbh->db_buff = (u_char *) malloc(dbh->db_rlen)) == NULL)
- return (dbhead *) DBF_ERROR;
-
- free(fieldc);
- free(head);
-
- return dbh;
-}
-
-int
-dbf_write_head(dbhead * dbh)
-{
- dbf_header head;
- time_t now;
- struct tm *dbf_time;
-
- if (lseek(dbh->db_fd, 0, SEEK_SET) == -1)
- return DBF_ERROR;
-
-/* fill up the diskheader */
-
-/* Set dataarea of head to '\0' */
- memset(&head, '\0', sizeof(dbf_header));
-
- head.dbh_dbt = DBH_NORMAL;
- if (dbh->db_memo)
- head.dbh_dbt = DBH_MEMO;
-
- now = time((time_t *) NULL);
- dbf_time = localtime(&now);
- head.dbh_year = dbf_time->tm_year;
- head.dbh_month = dbf_time->tm_mon + 1; /* Months since January + 1 */
- head.dbh_day = dbf_time->tm_mday;
-
- put_long(head.dbh_records, dbh->db_records);
- put_short(head.dbh_hlen, dbh->db_hlen);
- put_short(head.dbh_rlen, dbh->db_rlen);
-
- if (write(dbh->db_fd, &head, sizeof(dbf_header)) != sizeof(dbf_header))
- return DBF_ERROR;
-
- return 0;
-}
-
-int
-dbf_put_fields(dbhead * dbh)
-{
- dbf_field field;
- u_long t;
- u_char end = 0x0D;
-
- if (lseek(dbh->db_fd, sizeof(dbf_header), SEEK_SET) == -1)
- return DBF_ERROR;
-
-/* Set dataarea of field to '\0' */
- memset(&field, '\0', sizeof(dbf_field));
-
- for (t = 0; t < dbh->db_nfields; t++)
- {
- strncpy(field.dbf_name, dbh->db_fields[t].db_name, DBF_NAMELEN - 1);
- field.dbf_type = dbh->db_fields[t].db_type;
- field.dbf_flen = dbh->db_fields[t].db_flen;
- field.dbf_dec = dbh->db_fields[t].db_dec;
-
- if (write(dbh->db_fd, &field, sizeof(dbf_field)) != sizeof(dbf_field))
- return DBF_ERROR;
- }
-
- if (write(dbh->db_fd, &end, 1) != 1)
- return DBF_ERROR;
-
- return 0;
-}
-
-int
-dbf_add_field(dbhead * dbh, char *name, u_char type,
- u_char length, u_char dec)
-{
- f_descr *ptr;
- u_char *foo;
- u_long size,
- field_no;
-
- size = (dbh->db_nfields + 1) * sizeof(f_descr);
- if (!(ptr = (f_descr *) realloc(dbh->db_fields, size)))
- return DBF_ERROR;
- dbh->db_fields = ptr;
-
- field_no = dbh->db_nfields;
- strncpy(dbh->db_fields[field_no].db_name, name, DBF_NAMELEN);
- dbh->db_fields[field_no].db_type = type;
- dbh->db_fields[field_no].db_flen = length;
- dbh->db_fields[field_no].db_dec = dec;
-
- dbh->db_nfields++;
- dbh->db_hlen += sizeof(dbf_field);
- dbh->db_rlen += length;
-
- if (!(foo = (u_char *) realloc(dbh->db_buff, dbh->db_rlen)))
- return DBF_ERROR;
-
- dbh->db_buff = foo;
-
- return 0;
-}
-
-dbhead *
-dbf_open_new(char *name, int flags)
-{
- dbhead *dbh;
-
- if (!(dbh = (dbhead *) malloc(sizeof(dbhead))))
- return (dbhead *) DBF_ERROR;
-
- if (flags & O_CREAT)
- {
- if ((dbh->db_fd = open(name, flags, DBF_FILE_MODE)) == -1)
- {
- free(dbh);
- return (dbhead *) DBF_ERROR;
- }
- }
- else
- {
- if ((dbh->db_fd = open(name, flags, 0)) == -1)
- {
- free(dbh);
- return (dbhead *) DBF_ERROR;
- }
- }
-
-
- dbh->db_offset = 0;
- dbh->db_memo = 0;
- dbh->db_year = 0;
- dbh->db_month = 0;
- dbh->db_day = 0;
- dbh->db_hlen = sizeof(dbf_header) + 1;
- dbh->db_records = 0;
- dbh->db_currec = 0;
- dbh->db_rlen = 1;
- dbh->db_nfields = 0;
- dbh->db_buff = NULL;
- dbh->db_fields = (f_descr *) NULL;
-
- return dbh;
-}
-
-void
-dbf_close(dbhead * dbh)
-{
- int t;
-
- close(dbh->db_fd);
-
- for (t = 0; t < dbh->db_nfields; t++)
- free(&dbh->db_fields[t]);
-
- if (dbh->db_buff != NULL)
- free(dbh->db_buff);
-
- free(dbh);
-}
-
-int
-dbf_get_record(dbhead * dbh, field * fields, u_long rec)
-{
- u_char *data;
- int t,
- i,
- offset;
- u_char *dbffield,
- *end;
-
-/* calculate at which offset we have to read. *DON'T* forget the
- 0x0D which seperates field-descriptions from records!
-
- Note (april 5 1996): This turns out to be included in db_hlen
-*/
- offset = dbh->db_hlen + (rec * dbh->db_rlen);
-
- if (lseek(dbh->db_fd, offset, SEEK_SET) == -1)
- {
- lseek(dbh->db_fd, 0, SEEK_SET);
- dbh->db_offset = 0;
- return DBF_ERROR;
- }
-
- dbh->db_offset = offset;
- dbh->db_currec = rec;
- data = dbh->db_buff;
-
- read(dbh->db_fd, data, dbh->db_rlen);
-
- if (data[0] == DBF_DELETED)
- return DBF_DELETED;
-
- dbffield = &data[1];
- for (t = 0; t < dbh->db_nfields; t++)
- {
- strncpy(fields[t].db_name, dbh->db_fields[t].db_name, DBF_NAMELEN);
- fields[t].db_type = dbh->db_fields[t].db_type;
- fields[t].db_flen = dbh->db_fields[t].db_flen;
- fields[t].db_dec = dbh->db_fields[t].db_dec;
-
- if (fields[t].db_type == 'C')
- {
- end = &dbffield[fields[t].db_flen - 1];
- i = fields[t].db_flen;
- while (i > 0 && !isprint(*end))
- {
- end--;
- i--;
- }
- strncpy((char *) fields[t].db_contents, (char *) dbffield, i);
- fields[t].db_contents[i] = '\0';
- }
- else
- {
- end = dbffield;
- i = fields[t].db_flen;
- while (i > 0 && !isprint(*end))
- {
- end++;
- i--;
- }
- strncpy((char *) fields[t].db_contents, (char *) end, i);
- fields[t].db_contents[i] = '\0';
- }
-
- dbffield += fields[t].db_flen;
- }
-
- dbh->db_offset += dbh->db_rlen;
-
- return DBF_VALID;
-}
-
-field *
-dbf_build_record(dbhead * dbh)
-{
- int t;
- field *fields;
-
- if (!(fields = (field *) calloc(dbh->db_nfields, sizeof(field))))
- return (field *) DBF_ERROR;
-
- for (t = 0; t < dbh->db_nfields; t++)
- {
- if (!(fields[t].db_contents =
- (u_char *) malloc(dbh->db_fields[t].db_flen + 1)))
- {
- for (t = 0; t < dbh->db_nfields; t++)
- {
- if (fields[t].db_contents != 0)
- {
- free(fields[t].db_contents);
- free(fields);
- }
- return (field *) DBF_ERROR;
- }
- }
- strncpy(fields[t].db_name, dbh->db_fields[t].db_name, DBF_NAMELEN);
- fields[t].db_type = dbh->db_fields[t].db_type;
- fields[t].db_flen = dbh->db_fields[t].db_flen;
- fields[t].db_dec = dbh->db_fields[t].db_dec;
- }
-
- return fields;
-}
-
-void
-dbf_free_record(dbhead * dbh, field * rec)
-{
- int t;
-
- for (t = 0; t < dbh->db_nfields; t++)
- free(rec[t].db_contents);
-
- free(rec);
-}
-
-int
-dbf_put_record(dbhead * dbh, field * rec, u_long where)
-{
- u_long offset,
- new,
- idx,
- t,
- h,
- length;
- u_char *data,
- end = 0x1a;
- double fl;
- char foo[128],
- format[32];
-
-/* offset: offset in file for this record
- new: real offset after lseek
- idx: index to which place we are inside the 'hardcore'-data for this
- record
- t: field-counter
- data: the hardcore-data that is put on disk
- h: index into the field-part in the hardcore-data
- length: length of the data to copy
- fl: a float used to get the right precision with real numbers
- foo: copy of db_contents when field is not 'C'
- format: sprintf format-string to get the right precision with real numbers
-
- NOTE: this declaration of 'foo' can cause overflow when the contents-field
- is longer the 127 chars (which is highly unlikely, because it is not used
- in text-fields).
-*/
-/* REMEMBER THAT THERE'S A 0x1A AT THE END OF THE FILE, SO DON'T
- DO A SEEK_END WITH 0!!!!!! USE -1 !!!!!!!!!!
-*/
-
- if (where > dbh->db_records)
- {
- if ((new = lseek(dbh->db_fd, -1, SEEK_END)) == -1)
- return DBF_ERROR;
- dbh->db_records++;
- }
- else
- {
- offset = dbh->db_hlen + (where * dbh->db_rlen);
- if ((new = lseek(dbh->db_fd, offset, SEEK_SET)) == -1)
- return DBF_ERROR;
- }
-
- dbh->db_offset = new;
-
- data = dbh->db_buff;
-
-/* Set dataarea of data to ' ' (space) */
- memset(data, ' ', dbh->db_rlen);
-
-/* data[0] = DBF_VALID; */
-
- idx = 1;
- for (t = 0; t < dbh->db_nfields; t++)
- {
-/* if field is empty, don't do a thing */
- if (rec[t].db_contents[0] != '\0')
- {
-/* Handle text */
- if (rec[t].db_type == 'C')
- {
- if (strlen((char *) rec[t].db_contents) > rec[t].db_flen)
- length = rec[t].db_flen;
- else
- length = strlen((char *) rec[t].db_contents);
- strncpy((char *) data + idx, (char *) rec[t].db_contents,
- length);
- }
- else
- {
-/* Handle the rest */
-/* Numeric is special, because of real numbers */
- if ((rec[t].db_type == 'N') && (rec[t].db_dec != 0))
- {
- fl = atof((char *) rec[t].db_contents);
- snprintf(format, 32, "%%.%df", rec[t].db_dec);
- snprintf(foo, 128, format, fl);
- }
- else
- strncpy(foo, (char *) rec[t].db_contents, 128);
- if (strlen(foo) > rec[t].db_flen)
- length = rec[t].db_flen;
- else
- length = strlen(foo);
- h = rec[t].db_flen - length;
- strncpy((char *) (data + idx + h), foo, length);
- }
- }
- idx += rec[t].db_flen;
- }
-
- if (write(dbh->db_fd, data, dbh->db_rlen) != dbh->db_rlen)
- return DBF_ERROR;
-
- /* There's a 0x1A at the end of a dbf-file */
- if (where == dbh->db_records)
- {
- if (write(dbh->db_fd, &end, 1) != 1)
- return DBF_ERROR;
- }
-
- dbh->db_offset += dbh->db_rlen;
-
- return 0;
-}
diff --git a/contrib/dbase/dbf.h b/contrib/dbase/dbf.h
deleted file mode 100644
index 2e734b7107..0000000000
--- a/contrib/dbase/dbf.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/dbase/dbf.h,v 1.9 2006/03/11 04:38:28 momjian Exp $ */
-
-/* header-file for dbf.c
- declares routines for reading and writing xBase-files (.dbf), and
- associated structures
-
- Maarten Boekhold (maarten.boekhold@reuters.com) 29 oktober 1995
-*/
-
-#ifndef _DBF_H
-#define _DBF_H
-
-#ifdef _WIN32
-#include <gmon.h> /* we need it to define u_char type */
-#endif
-#include <sys/types.h>
-
-/**********************************************************************
-
- The DBF-part
-
-***********************************************************************/
-
-#define DBF_FILE_MODE 0644
-
-/* byte offsets for date in dbh_date */
-
-#define DBH_DATE_YEAR 0
-#define DBH_DATE_MONTH 1
-#define DBH_DATE_DAY 2
-
-/* maximum fieldname-length */
-
-#define DBF_NAMELEN 11
-
-/* magic-cookies for the file */
-
-#define DBH_NORMAL 0x03
-#define DBH_MEMO 0x83
-
-/* magic-cookies for the fields */
-
-#define DBF_ERROR -1
-#define DBF_VALID 0x20
-#define DBF_DELETED 0x2A
-
-/* diskheader */
-
-typedef struct
-{
- u_char dbh_dbt; /* indentification field */
- u_char dbh_year; /* last modification-date */
- u_char dbh_month;
- u_char dbh_day;
- u_char dbh_records[4]; /* number of records */
- u_char dbh_hlen[2]; /* length of this header */
- u_char dbh_rlen[2]; /* length of a record */
- u_char dbh_stub[20]; /* misc stuff we don't need */
-} dbf_header;
-
-/* disk field-description */
-
-typedef struct
-{
- char dbf_name[DBF_NAMELEN]; /* field-name terminated with \0 */
- u_char dbf_type; /* field-type */
- u_char dbf_reserved[4]; /* some reserved stuff */
- u_char dbf_flen; /* field-length */
- u_char dbf_dec; /* number of decimal positions if type is 'N' */
- u_char dbf_stub[14]; /* stuff we don't need */
-} dbf_field;
-
-/* memory field-description */
-
-typedef struct
-{
- char db_name[DBF_NAMELEN]; /* field-name terminated with \0 */
- u_char db_type; /* field-type */
- u_char db_flen; /* field-length */
- u_char db_dec; /* number of decimal positions */
-} f_descr;
-
-/* memory dfb-header */
-
-typedef struct
-{
- int db_fd; /* file-descriptor */
- u_long db_offset; /* current offset in file */
- u_char db_memo; /* memo-file present */
- u_char db_year; /* last update as YYMMDD */
- u_char db_month;
- u_char db_day;
- u_long db_hlen; /* length of the diskheader, for calculating
- * the offsets */
- u_long db_records; /* number of records */
- u_long db_currec; /* current record-number starting at 0 */
- u_short db_rlen; /* length of the record */
- u_char db_nfields; /* number of fields */
- u_char *db_buff; /* record-buffer to save malloc()'s */
- f_descr *db_fields; /* pointer to an array of field- descriptions */
-} dbhead;
-
-/* structure that contains everything a user wants from a field, including
- the contents (in ASCII). Warning! db_flen may be bigger than the actual
- length of db_name! This is because a field doesn't have to be completely
- filled */
-
-typedef struct
-{
- char db_name[DBF_NAMELEN]; /* field-name terminated with \0 */
- u_char db_type; /* field-type */
- u_char db_flen; /* field-length */
- u_char db_dec; /* number of decimal positions */
- u_char *db_contents; /* contents of the field in ASCII */
-} field;
-
-/* prototypes for functions */
-
-extern dbhead *dbf_open(char *file, int flags);
-extern int dbf_write_head(dbhead * dbh);
-extern int dbf_put_fields(dbhead * dbh);
-extern int dbf_add_field(dbhead * dbh, char *name, u_char type,
- u_char length, u_char dec);
-extern dbhead *dbf_open_new(char *name, int flags);
-extern void dbf_close(dbhead * dbh);
-extern int dbf_get_record(dbhead * dbh, field * fields, u_long rec);
-extern field *dbf_build_record(dbhead * dbh);
-extern void dbf_free_record(dbhead * dbh, field * fields);
-extern int dbf_put_record(dbhead * dbh, field * rec, u_long where);
-
-/*********************************************************************
-
- The endian-part
-
-***********************************************************************/
-
-extern long get_long(u_char *cp);
-extern void put_long(u_char *cp, long lval);
-extern short get_short(u_char *cp);
-extern void put_short(u_char *cp, short lval);
-
-#endif /* _DBF_H */
diff --git a/contrib/dbase/dbf2pg.1 b/contrib/dbase/dbf2pg.1
deleted file mode 100644
index 34b37b402a..0000000000
--- a/contrib/dbase/dbf2pg.1
+++ /dev/null
@@ -1,118 +0,0 @@
-.\" $PostgreSQL: pgsql/contrib/dbase/dbf2pg.1,v 1.3 2006/03/11 04:38:28 momjian Exp $
-
-.TH dbf2sql 1L \" -*- nroff -*-
-.SH NAME
-dbf2sql \- Insert xBase\-style .dbf\-files into a PostgreSQL\-table
-.SH SYNOPSIS
-.B dbf2pg [options] dbf-file
-.br
-.br
-Options:
-.br
-[-v[v]] [-f] [-u | -l] [-c | -D] [-d database] [-t table]
-[-h host] [-s oldname=[newname][,oldname=[newname]]]
-[-b start] [-e end] [-W] [-U username] [-B transaction_size]
-[-F charset_from [-T charset_to]]
-
-.SH DESCRIPTION
-This manual page documents the program
-.BR dbf2pg.
-It takes an xBase-style .dbf-file, and inserts it into the specified
-database and table.
-.SS OPTIONS
-.TP
-.I "\-v"
-Display some status-messages.
-.TP
-.I "-vv"
-Also display progress.
-.TP
-.I "-f"
-Convert all field-names from the .dbf-file to lowercase.
-.TP
-.I "-u"
-Convert the contents of all fields to uppercase.
-.TP
-.I "-l"
-Convert the contents of all fields to lowercase.
-.TP
-.I "-c"
-Create the table specified with
-.IR \-t .
-If this table already exists, first
-.BR DROP
-it.
-.TP
-.I "-D"
-Delete the contents of the table specified with
-.IR \-t .
-Note that this table has to exists. An error is returned if this is not the
-case.
-.TP
-.I "-W"
-Ask for password.
-.TP
-.I "-d database"
-Specify the database to use. An error is returned if this database does not
-exists. Default is "test".
-.TP
-.I "-t table"
-Specify the table to insert in. An error is returned if this table does not
-exists. Default is "test".
-.TP
-.I "-h host"
-Specify the host to which to connect. Default is "localhost".
-.TP
-.I "-s oldname=newname[,oldname=newname]"
-Change the name of a field from
-.BR oldname
-to
-.BR newname .
-This is mainly used to avoid using reserved SQL-keywords. Example:
-.br
-.br
--s SELECT=SEL,COMMIT=doit
-.br
-.br
-This is done
-.BR before
-the
-.IR -f
-operator has taken effect!
-.TP
-.I "-b start"
-Specify the first record-number in the xBase-file we will insert.
-.TP
-.I "-e end"
-Specify the last record-number in the xBase-file we will insert.
-.TP
-.I "-B transaction_size"
-Specify the number of records per transaction, default is all records.
-.TP
-.I "-U username"
-Log as the specified user in the database.
-.TP
-.I "-F charset_from"
-If specified, it converts the data from the specified charset. Example:
-.br
-.br
--F IBM437
-.br
-.br
-Consult your system documentation to see the convertions available.
-.TP
-.I "-T charset_to"
-Together with
-.I "-F charset_from"
-, it converts the data to the specified charset. Default is "ISO-8859-1".
-.SH ENVIRONMENT
-This program is affected by the environment-variables as used
-by
-.B PostgresSQL.
-See the documentation of PostgresSQL for more info.
-.SH BUGS
-Fields larger than 8192 characters are not supported and could break the
-program.
-.br
-Some charset convertions could cause the output to be larger than the input
-and could break the program.
diff --git a/contrib/dbase/dbf2pg.c b/contrib/dbase/dbf2pg.c
deleted file mode 100644
index 0fc0aedd8f..0000000000
--- a/contrib/dbase/dbf2pg.c
+++ /dev/null
@@ -1,839 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/dbase/dbf2pg.c,v 1.27 2006/03/11 04:38:28 momjian Exp $ */
-
-/* This program reads in an xbase-dbf file and sends 'inserts' to an
- PostgreSQL-server with the records in the xbase-file
-
- M. Boekhold (maarten.boekhold@reuters.com) okt. 1995
- oktober 1996: merged sources of dbf2msql.c and dbf2pg.c
- oktober 1997: removed msql support
-*/
-#include "postgres_fe.h"
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <ctype.h>
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-#ifdef HAVE_ICONV_H
-#include <iconv.h>
-#endif
-#ifdef HAVE_GETOPT_H
-#include <getopt.h>
-#endif
-
-#include "libpq-fe.h"
-#include "dbf.h"
-
-int verbose = 0,
- upper = 0,
- lower = 0,
- create = 0,
- fieldlow = 0;
-int del = 0;
-unsigned int begin = 0,
- end = 0;
-unsigned int t_block = 0;
-
-#ifdef HAVE_ICONV_H
-char *charset_from = NULL;
-char *charset_to = "ISO-8859-1";
-iconv_t iconv_d;
-char convert_charset_buff[8192];
-#endif
-
-char *host = NULL;
-char *dbase = "test";
-char *table = "test";
-char *username = NULL;
-char *password = NULL;
-char *subarg = NULL;
-char escape_buff[8192];
-
-void do_substitute(char *subarg, dbhead * dbh);
-
-static inline void strtoupper(char *string);
-static inline void strtolower(char *string);
-
-void do_create(PGconn *, char *, dbhead *);
-void do_inserts(PGconn *, char *, dbhead *);
-int check_table(PGconn *, char *);
-
-char *Escape_db(char *);
-
-#ifdef HAVE_ICONV_H
-char *convert_charset(char *string);
-#endif
-void usage(void);
-
-
-static inline void
-strtoupper(char *string)
-{
- while (*string != '\0')
- {
- *string = toupper((unsigned char) *string);
- string++;
- }
-}
-
-static inline void
-strtolower(char *string)
-{
- while (*string != '\0')
- {
- *string = tolower((unsigned char) *string);
- string++;
- }
-}
-
-/* FIXME: should this check for overflow? */
-char *
-Escape_db(char *string)
-{
- char *foo,
- *bar;
-
- foo = escape_buff;
-
- bar = string;
- while (*bar != '\0')
- {
- if ((*bar == '\t') ||
- (*bar == '\n') ||
- (*bar == '\\'))
- *foo++ = '\\';
- *foo++ = *bar++;
- }
- *foo = '\0';
-
- return escape_buff;
-}
-
-#ifdef HAVE_ICONV_H
-char *
-convert_charset(char *string)
-{
- size_t in_size,
- out_size,
- nconv;
- char *in_ptr,
- *out_ptr;
-
- in_size = strlen(string) + 1;
- out_size = sizeof(convert_charset_buff);
- in_ptr = string;
- out_ptr = convert_charset_buff;
-
- iconv(iconv_d, NULL, &in_size, &out_ptr, &out_size); /* necessary to reset
- * state information */
- while (in_size > 0)
- {
- nconv = iconv(iconv_d, &in_ptr, &in_size, &out_ptr, &out_size);
- if (nconv == (size_t) -1)
- {
- printf("WARNING: cannot convert charset of string \"%s\".\n",
- string);
- strcpy(convert_charset_buff, string);
- return convert_charset_buff;
- }
- }
- *out_ptr = 0; /* terminate output string */
- return convert_charset_buff;
-}
-#endif
-
-int
-check_table(PGconn *conn, char *table)
-{
- char *q = "select relname from pg_class where "
- "relkind='r' and relname !~* '^pg'";
- PGresult *res;
- int i = 0;
-
- if (!(res = PQexec(conn, q)))
- {
- printf("%s\n", PQerrorMessage(conn));
- return 0;
- }
-
- for (i = 0; i < PQntuples(res); i++)
- {
- if (!strcmp(table, PQgetvalue(res, i, PQfnumber(res, "relname"))))
- return 1;
- }
-
- return 0;
-}
-
-void
-usage(void)
-{
- printf("dbf2pg\n"
- "usage: dbf2pg [-u | -l] [-h hostname] [-W] [-U username]\n"
- " [-B transaction_size] [-F charset_from [-T charset_to]]\n"
- " [-s oldname=[newname][,oldname=[newname][...]]] [-d dbase]\n"
- " [-t table] [-c | -D] [-f] [-v[v]] dbf-file\n");
-}
-
-/* patch submitted by Jeffrey Y. Sue <jysue@aloha.net> */
-/* Provides functionality for substituting dBase-fieldnames for others */
-/* Mainly for avoiding conflicts between fieldnames and SQL-reserved */
-/* keywords */
-
-void
-do_substitute(char *subarg, dbhead * dbh)
-{
- /* NOTE: subarg is modified in this function */
- int i,
- bad;
- char *p,
- *oldname,
- *newname;
-
- if (!subarg)
- return;
- if (verbose > 1)
- printf("Substituting new field names\n");
- /* use strstr instead of strtok because of possible empty tokens */
- oldname = subarg;
- while (oldname && strlen(oldname) && (p = strstr(oldname, "=")))
- {
- *p = '\0'; /* mark end of oldname */
- newname = ++p; /* point past \0 of oldname */
- if (strlen(newname))
- { /* if not an empty string */
- p = strstr(newname, ",");
- if (p)
- {
- *p = '\0'; /* mark end of newname */
- p++; /* point past where the comma was */
- }
- }
- if (strlen(newname) >= DBF_NAMELEN)
- {
- printf("Truncating new field name %s to %d chars\n",
- newname, DBF_NAMELEN - 1);
- newname[DBF_NAMELEN - 1] = '\0';
- }
- bad = 1;
- for (i = 0; i < dbh->db_nfields; i++)
- {
- if (strcmp(dbh->db_fields[i].db_name, oldname) == 0)
- {
- bad = 0;
- strcpy(dbh->db_fields[i].db_name, newname);
- if (verbose > 1)
- {
- printf("Substitute old:%s new:%s\n",
- oldname, newname);
- }
- break;
- }
- }
- if (bad)
- {
- printf("Warning: old field name %s not found\n",
- oldname);
- }
- oldname = p;
- }
-} /* do_substitute */
-
-void
-do_create(PGconn *conn, char *table, dbhead * dbh)
-{
- char *query;
- char t[20];
- int i,
- length;
- PGresult *res;
-
- if (verbose > 1)
- printf("Building CREATE-clause\n");
-
- if (!(query = (char *) malloc(
- (dbh->db_nfields * 40) + 29 + strlen(table))))
- {
- fprintf(stderr, "Memory allocation error in function do_create\n");
- PQfinish(conn);
- close(dbh->db_fd);
- free(dbh);
- exit(1);
- }
-
- sprintf(query, "CREATE TABLE %s (", table);
- length = strlen(query);
- for (i = 0; i < dbh->db_nfields; i++)
- {
- if (!strlen(dbh->db_fields[i].db_name))
- {
- continue;
- /* skip field if length of name == 0 */
- }
- if ((strlen(query) != length))
- strcat(query, ",");
-
- if (fieldlow)
- strtolower(dbh->db_fields[i].db_name);
-
- strcat(query, dbh->db_fields[i].db_name);
- switch (dbh->db_fields[i].db_type)
- {
- case 'D':
- strcat(query, " date");
- break;
- case 'C':
- if (dbh->db_fields[i].db_flen > 1)
- {
- strcat(query, " varchar");
- snprintf(t, 20, "(%d)",
- dbh->db_fields[i].db_flen);
- strcat(query, t);
- }
- else
- strcat(query, " char");
- break;
- case 'N':
- if (dbh->db_fields[i].db_dec != 0)
- strcat(query, " real");
- else
- strcat(query, " int");
- break;
- case 'L':
- strcat(query, " char");
- break;
- case 'M':
- strcat(query, " text");
- break;
- }
- }
-
- strcat(query, ")");
-
- if (verbose > 1)
- {
- printf("Sending create-clause\n");
- printf("%s\n", query);
- }
-
- if ((res = PQexec(conn, query)) == NULL ||
- PQresultStatus(res) != PGRES_COMMAND_OK)
- {
- fprintf(stderr, "Error creating table!\n");
- fprintf(stderr, "Detailed report: %s\n", PQerrorMessage(conn));
- close(dbh->db_fd);
- free(dbh);
- free(query);
- PQfinish(conn);
- exit(1);
- }
-
- PQclear(res);
- free(query);
-}
-
-/* FIXME: can be optimized to not use strcat, but it is worth the effort? */
-void
-do_inserts(PGconn *conn, char *table, dbhead * dbh)
-{
- PGresult *res;
- field *fields;
- int i,
- h,
- j,
- result;
- char *query,
- *foo;
- char pgdate[11];
-
- if (verbose > 1)
- printf("Inserting records\n");
-
- h = 2; /* 2 because of terminating \n\0 */
-
- for (i = 0; i < dbh->db_nfields; i++)
- {
- h += dbh->db_fields[i].db_flen > 2 ?
- dbh->db_fields[i].db_flen :
- 2; /* account for possible NULL values (\N) */
- h += 1; /* the delimiter */
- }
-
- /*
- * make sure we can build the COPY query, note that we don't need to just
- * add this value, since the COPY query is a separate query (see below)
- */
- if (h < 17 + strlen(table))
- h = 17 + strlen(table);
-
- if (!(query = (char *) malloc(h)))
- {
- PQfinish(conn);
- fprintf(stderr,
- "Memory allocation error in function do_inserts (query)\n");
- close(dbh->db_fd);
- free(dbh);
- exit(1);
- }
-
- if ((fields = dbf_build_record(dbh)) == (field *) DBF_ERROR)
- {
- fprintf(stderr,
- "Couldn't allocate memory for record in do_insert\n");
- PQfinish(conn);
- free(query);
- dbf_close(dbh);
- exit(1);
- }
-
- if (end == 0) /* "end" is a user option, if not specified, */
- end = dbh->db_records; /* then all records are processed. */
-
- if (t_block == 0) /* user not specified transaction block size */
- t_block = end - begin; /* then we set it to be the full data */
-
- for (i = begin; i < end; i++)
- {
- /* we need to start a new transaction and COPY statement */
- if (((i - begin) % t_block) == 0)
- {
- if (verbose > 1)
- fprintf(stderr, "Transaction: START\n");
- res = PQexec(conn, "BEGIN");
- if (res == NULL)
- {
- fprintf(stderr, "Error starting transaction!\n");
- fprintf(stderr, "Detailed report: %s\n", PQerrorMessage(conn));
- exit(1);
- }
- sprintf(query, "COPY %s FROM stdin", table);
- res = PQexec(conn, query);
- if (res == NULL)
- {
- fprintf(stderr, "Error starting COPY!\n");
- fprintf(stderr, "Detailed report: %s\n", PQerrorMessage(conn));
- exit(1);
- }
- }
-
- /* build line and submit */
- result = dbf_get_record(dbh, fields, i);
- if (result == DBF_VALID)
- {
- query[0] = '\0';
- j = 0; /* counter for fields in the output */
- for (h = 0; h < dbh->db_nfields; h++)
- {
- if (!strlen(fields[h].db_name)) /* When the new fieldname is
- * empty, the field is skipped */
- continue;
- else
- j++;
-
- if (j > 1) /* not for the first field! */
- strcat(query, "\t"); /* COPY statement field
- * separator */
-
- if (upper)
- strtoupper((char *) fields[h].db_contents);
- if (lower)
- strtolower((char *) fields[h].db_contents);
-
- foo = (char *) fields[h].db_contents;
-#ifdef HAVE_ICONV_H
- if (charset_from)
- foo = convert_charset(foo);
-#endif
- foo = Escape_db(foo);
-
- /* handle the date first - liuk */
- if (fields[h].db_type == 'D')
- {
- if (strlen(foo) == 0)
- {
- /* assume empty string means a NULL */
- strcat(query, "\\N");
- }
- else if (strlen(foo) == 8 &&
- strspn(foo, "0123456789") == 8)
- {
- /* transform YYYYMMDD to Postgres style */
- snprintf(pgdate, 11, "%c%c%c%c-%c%c-%c%c",
- foo[0], foo[1], foo[2], foo[3],
- foo[4], foo[5], foo[6], foo[7]);
- strcat(query, pgdate);
- }
- else
- {
- /* try to insert it as-is */
- strcat(query, foo);
- }
- }
- else if (fields[h].db_type == 'N')
- {
- if (strlen(foo) == 0)
- {
- /* assume empty string means a NULL */
- strcat(query, "\\N");
- }
- else
- strcat(query, foo);
- }
- else
- {
- strcat(query, foo); /* must be character */
- }
- }
- strcat(query, "\n");
-
- if ((verbose > 1) && ((i % 100) == 0))
- { /* Only show every 100 */
- printf("Inserting record %d\n", i); /* records. */
- }
- PQputline(conn, query);
-
- }
- /* we need to end this copy and transaction */
- if (((i - begin) % t_block) == t_block - 1)
- {
- if (verbose > 1)
- fprintf(stderr, "Transaction: END\n");
- PQputline(conn, "\\.\n");
- if (PQendcopy(conn) != 0)
- {
- fprintf(stderr, "Something went wrong while copying. Check "
- "your tables!\n");
- exit(1);
- }
- res = PQexec(conn, "END");
- if (res == NULL)
- {
- fprintf(stderr, "Error committing work!\n");
- fprintf(stderr, "Detailed report: %s\n", PQerrorMessage(conn));
- exit(1);
- }
- }
- }
-
- /* last row copied in, end copy and transaction */
- /* remember, i is now 1 greater then when we left the loop */
- if (((i - begin) % t_block) != 0)
- {
- if (verbose > 1)
- fprintf(stderr, "Transaction: END\n");
- PQputline(conn, "\\.\n");
-
- if (PQendcopy(conn) != 0)
- {
- fprintf(stderr, "Something went wrong while copying. Check "
- "your tables!\n");
- }
- res = PQexec(conn, "END");
- if (res == NULL)
- {
- fprintf(stderr, "Error committing work!\n");
- fprintf(stderr, "Detailed report: %s\n", PQerrorMessage(conn));
- exit(1);
- }
- }
- dbf_free_record(dbh, fields);
-
- free(query);
-}
-
-
-int
-main(int argc, char **argv)
-{
- PGconn *conn;
- int i;
- extern int optind;
- extern char *optarg;
- char *query;
- dbhead *dbh;
-
- while ((i = getopt(argc, argv, "DWflucvh:b:e:d:t:s:B:U:F:T:")) != -1)
- {
- switch (i)
- {
- case 'D':
- if (create)
- {
- usage();
- printf("Can't use -c and -D at the same time!\n");
- exit(1);
- }
- del = 1;
- break;
- case 'W':
- password = simple_prompt("Password: ", 100, 0);
- break;
- case 'f':
- fieldlow = 1;
- break;
- case 'v':
- verbose++;
- break;
- case 'c':
- if (del)
- {
- usage();
- printf("Can't use -c and -D at the same time!\n");
- exit(1);
- }
- create = 1;
- break;
- case 'l':
- lower = 1;
- break;
- case 'u':
- if (lower)
- {
- usage();
- printf("Can't use -u and -l at the same time!\n");
- exit(1);
- }
- upper = 1;
- break;
- case 'b':
- begin = atoi(optarg);
- break;
- case 'e':
- end = atoi(optarg);
- break;
- case 'h':
- host = (char *) strdup(optarg);
- break;
- case 'd':
- dbase = (char *) strdup(optarg);
- break;
- case 't':
- table = (char *) strdup(optarg);
- break;
- case 's':
- subarg = (char *) strdup(optarg);
- break;
- case 'B':
- t_block = atoi(optarg);
- break;
- case 'U':
- username = (char *) strdup(optarg);
- break;
- case 'F':
-#ifdef HAVE_ICONV_H
- charset_from = (char *) strdup(optarg);
-#else
- printf("WARNING: dbf2pg was compiled without iconv support, ignoring -F option\n");
-#endif
- break;
-#ifdef HAVE_ICONV_H
- case 'T':
- charset_to = (char *) strdup(optarg);
- break;
-#endif
- case ':':
- usage();
- printf("missing argument!\n");
- exit(1);
- break;
- case '?':
- usage();
-
- /*
- * FIXME: Ivan thinks this is bad: printf("unknown argument:
- * %s\n", argv[0]);
- */
- exit(1);
- break;
- default:
- break;
- }
- }
-
- argc -= optind;
- argv = &argv[optind];
-
- if (argc != 1)
- {
- usage();
- if (username)
- free(username);
- if (password)
- free(password);
- exit(1);
- }
-
-#ifdef HAVE_ICONV_H
- if (charset_from)
- {
- if (verbose > 1)
- printf("Setting conversion from charset \"%s\" to \"%s\".\n",
- charset_from, charset_to);
- iconv_d = iconv_open(charset_to, charset_from);
- if (iconv_d == (iconv_t) - 1)
- {
- printf("Cannot convert from charset \"%s\" to charset \"%s\".\n",
- charset_from, charset_to);
- exit(1);
- }
- }
-#endif
-
- if (verbose > 1)
- printf("Opening dbf-file\n");
-
- setlocale(LC_ALL, ""); /* fix for isprint() */
-
- if ((dbh = dbf_open(argv[0], O_RDONLY)) == (dbhead *) - 1)
- {
- fprintf(stderr, "Couldn't open xbase-file %s\n", argv[0]);
- if (username)
- free(username);
- if (password)
- free(password);
-#ifdef HAVE_ICONV_H
- if (charset_from)
- iconv_close(iconv_d);
-#endif
- exit(1);
- }
-
- if (fieldlow)
- for (i = 0; i < dbh->db_nfields; i++)
- strtolower(dbh->db_fields[i].db_name);
-
- if (verbose)
- {
- printf("dbf-file: %s, PG-dbase: %s, PG-table: %s\n", argv[0],
- dbase,
- table);
- printf("Number of records: %ld\n", dbh->db_records);
- printf("NAME:\t\tLENGTH:\t\tTYPE:\n");
- printf("-------------------------------------\n");
- for (i = 0; i < dbh->db_nfields; i++)
- {
- printf("%-12s\t%7d\t\t%5c\n", dbh->db_fields[i].db_name,
- dbh->db_fields[i].db_flen,
- dbh->db_fields[i].db_type);
- }
- }
-
- if (verbose > 1)
- printf("Making connection to PG-server\n");
-
- conn = PQsetdbLogin(host, NULL, NULL, NULL, dbase, username, password);
- if (PQstatus(conn) != CONNECTION_OK)
- {
- fprintf(stderr, "Couldn't get a connection with the ");
- fprintf(stderr, "designated host!\n");
- fprintf(stderr, "Detailed report: %s\n", PQerrorMessage(conn));
- close(dbh->db_fd);
- free(dbh);
- if (username)
- free(username);
- if (password)
- free(password);
-#ifdef HAVE_ICONV_H
- if (charset_from)
- iconv_close(iconv_d);
-#endif
- exit(1);
- }
-
- PQexec(conn, "SET search_path = public");
-
-/* Substitute field names */
- do_substitute(subarg, dbh);
-
-/* create table if specified, else check if target table exists */
- if (!create)
- {
- if (!check_table(conn, table))
- {
- printf("Table does not exist!\n");
- if (username)
- free(username);
- if (password)
- free(password);
-#ifdef HAVE_ICONV_H
- if (charset_from)
- iconv_close(iconv_d);
-#endif
- exit(1);
- }
- if (del)
- {
- if (!(query = (char *) malloc(13 + strlen(table))))
- {
- printf("Memory-allocation error in main (delete)!\n");
- close(dbh->db_fd);
- free(dbh);
- PQfinish(conn);
- if (username)
- free(username);
- if (password)
- free(password);
-#ifdef HAVE_ICONV_H
- if (charset_from)
- iconv_close(iconv_d);
-#endif
- exit(1);
- }
- if (verbose > 1)
- printf("Deleting from original table\n");
- sprintf(query, "DELETE FROM %s", table);
- PQexec(conn, query);
- free(query);
- }
- }
- else
- {
- if (!(query = (char *) malloc(12 + strlen(table))))
- {
- printf("Memory-allocation error in main (drop)!\n");
- close(dbh->db_fd);
- free(dbh);
- PQfinish(conn);
- if (username)
- free(username);
- if (password)
- free(password);
-#ifdef HAVE_ICONV_H
- if (charset_from)
- iconv_close(iconv_d);
-#endif
- exit(1);
- }
- if (verbose > 1)
- printf("Dropping original table (if one exists)\n");
- sprintf(query, "DROP TABLE %s", table);
- PQexec(conn, query);
- free(query);
-
-/* Build a CREATE-clause
-*/
- do_create(conn, table, dbh);
- }
-
-/* Build an INSERT-clause
-*/
- PQexec(conn, "SET DATESTYLE TO 'ISO';");
- do_inserts(conn, table, dbh);
-
- if (verbose > 1)
- printf("Closing up....\n");
-
- close(dbh->db_fd);
- free(dbh);
- PQfinish(conn);
- if (username)
- free(username);
- if (password)
- free(password);
-#ifdef HAVE_ICONV_H
- if (charset_from)
- iconv_close(iconv_d);
-#endif
- exit(0);
-}
diff --git a/contrib/dbase/endian.c b/contrib/dbase/endian.c
deleted file mode 100644
index 9f32f2ca2a..0000000000
--- a/contrib/dbase/endian.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/dbase/endian.c,v 1.4 2006/03/11 04:38:28 momjian Exp $ */
-/* Maarten Boekhold (maarten.boekhold@reuters.com) oktober 1995 */
-
-#include <sys/types.h>
-#include "dbf.h"
-/*
- * routine to change little endian long to host long
- */
-long
-get_long(u_char *cp)
-{
- long ret;
-
- ret = *cp++;
- ret += ((*cp++) << 8);
- ret += ((*cp++) << 16);
- ret += ((*cp++) << 24);
-
- return ret;
-}
-
-void
-put_long(u_char *cp, long lval)
-{
- cp[0] = lval & 0xff;
- cp[1] = (lval >> 8) & 0xff;
- cp[2] = (lval >> 16) & 0xff;
- cp[3] = (lval >> 24) & 0xff;
-}
-
-/*
- * routine to change little endian short to host short
- */
-short
-get_short(u_char *cp)
-{
- short ret;
-
- ret = *cp++;
- ret += ((*cp++) << 8);
-
- return ret;
-}
-
-void
-put_short(u_char *cp, short sval)
-{
- cp[0] = sval & 0xff;
- cp[1] = (sval >> 8) & 0xff;
-}