diff options
Diffstat (limited to 'contrib/pginterface/pgwordcount.c')
-rw-r--r-- | contrib/pginterface/pgwordcount.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/contrib/pginterface/pgwordcount.c b/contrib/pginterface/pgwordcount.c new file mode 100644 index 00000000000..64096f23e62 --- /dev/null +++ b/contrib/pginterface/pgwordcount.c @@ -0,0 +1,72 @@ +/* + * wordcount.c + * +*/ + +#include <stdio.h> +#include <signal.h> +#include <time.h> +#include <libpq-fe.h> +#include "halt.h" +#include "pginterface.h" + +int main(int argc, char **argv) +{ + char query[4000]; + int row = 0; + int count; + char line[4000]; + + if (argc != 2) + halt("Usage: %s database\n",argv[0]); + + connectdb(argv[1],NULL,NULL,NULL,NULL); + on_error_continue(); + doquery("DROP TABLE words"); + on_error_stop(); + + doquery("\ + CREATE TABLE words( \ + matches int4, \ + word text ) \ + "); + doquery("\ + CREATE INDEX i_words_1 ON words USING btree ( \ + word text_ops )\ + "); + + while(1) + { + if (scanf("%s",line) != 1) + break; + doquery("BEGIN WORK"); + sprintf(query,"\ + DECLARE c_words BINARY CURSOR FOR \ + SELECT count(*) \ + FROM words \ + WHERE word = '%s'", line); + doquery(query); + doquery("FETCH ALL IN c_words"); + + while (fetch(&count) == END_OF_TUPLES) + count = 0; + doquery("CLOSE c_words"); + doquery("COMMIT WORK"); + + if (count == 0) + sprintf(query,"\ + INSERT INTO words \ + VALUES (1, '%s')", line); + else + sprintf(query,"\ + UPDATE words \ + SET matches = matches + 1 + WHERE word = '%s'", line); + doquery(query); + row++; + } + + disconnectdb(); + return 0; +} + |