pgwordcount.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*
  2.  * wordcount.c
  3.  *
  4. */
  5. #include <stdio.h>
  6. #include "halt.h"
  7. #include <libpq-fe.h>
  8. #include "pginterface.h"
  9. int
  10. main(int argc, char **argv)
  11. {
  12. char query[4000];
  13. int row = 0;
  14. int count;
  15. char line[4000];
  16. if (argc != 2)
  17. halt("Usage:  %s databasen", argv[0]);
  18. connectdb(argv[1], NULL, NULL, NULL, NULL);
  19. on_error_continue();
  20. doquery("DROP TABLE words");
  21. on_error_stop();
  22. doquery("
  23. CREATE TABLE words( 
  24. matches int4, 
  25. word text ) 
  26. ");
  27. doquery("
  28. CREATE INDEX i_words_1 ON words USING btree ( 
  29. word text_ops )
  30. ");
  31. while (1)
  32. {
  33. if (scanf("%s", line) != 1)
  34. break;
  35. doquery("BEGIN WORK");
  36. sprintf(query, "
  37. DECLARE c_words BINARY CURSOR FOR 
  38. SELECT count(*) 
  39. FROM words 
  40. WHERE word = '%s'", line);
  41. doquery(query);
  42. doquery("FETCH ALL IN c_words");
  43. while (fetch(&count) == END_OF_TUPLES)
  44. count = 0;
  45. doquery("CLOSE c_words");
  46. doquery("COMMIT WORK");
  47. if (count == 0)
  48. sprintf(query, "
  49. INSERT INTO words 
  50. VALUES (1, '%s')", line);
  51. else
  52. sprintf(query, "
  53. UPDATE words 
  54. SET matches = matches + 1 
  55. WHERE word = '%s'", line);
  56. doquery(query);
  57. row++;
  58. }
  59. disconnectdb();
  60. return 0;
  61. }