README
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. Postgres int8
  2. Thomas G. Lockhart <Thomas.Lockhart@jpl.nasa.gov>
  3. This is a first attempt at 64-bit integer arithmetic for Postgres. The code
  4. should support any 64-bit architecture and any 32-bit machine using a recent
  5. GNU C compiler. At the moment, DEC-Alpha and Linux/gcc are explicitly
  6. supported. The code uses "long long int" support in GNU C on 32-bit machines.
  7. This type is an extension to ANSI-C, and may not appear on any other compiler.
  8. The modules are built and installed as user-defined types, so destination
  9.  directories are pointing away from the standard Postgres areas.
  10. Other compilers and architectures should be supportable, so please let me know 
  11. what changes were required to run on your machine, and I will fold those into 
  12. this standard distribution.
  13. Good luck!
  14. - Tom
  15. Installation
  16. You will need to modify the Makefile paths to fit your machine. Since this
  17. is packaged as a "user-installable" type, the libraries and source code
  18. can reside outside of the standard Postgres areas.
  19. If you are compiling on a DEC-Alpha, then the code might compile
  20. and run without change. (I do a lot of code development on Alphas,
  21. but do not have a Postgres installation to test).
  22.   make
  23.   make install
  24.   psql dbname < int8.sql
  25. If you are running gcc on a 32-bit machine, you will probably need to:
  26.  - remove the extra library reference in the Makefile.
  27.  - if there are unresolved symbols when you try running, then find
  28.     the right library. The one I had chosen might be a clue.
  29. If you are not running gcc on a 32-bit machine, you will need to:
  30.  - redeclare the 64 bit data type.
  31.  - modify the scanf and printf() arguments to use the appropriate
  32.     64-bit int arguments.
  33. On my Linux box, I had to find an extra library for the division function.
  34. For Alpha boxes, both the DEC and GNU compilers should need "long int" only.
  35. I have a reference to "__alpha" in the C source code, but have not tested it
  36.  and am not certain that this is the correct pre-defined symbol for that machine.
  37. itest.sql is a small test file which exercises some of the I/O, functions,
  38.  and boolean operators.
  39. int8:
  40. =
  41. <>
  42. <
  43. >
  44. <=
  45. >=
  46. - unary minus
  47. + addition
  48. - subtraction
  49. * multiplication
  50. / division
  51. int4() convert to 4-byte integer
  52. float8() convert to double float
  53. Routines defined are:
  54. int64 *int8in(char *str);
  55. char *int8out(int64 *val);
  56. bool int8eq(int64 *val1, int64 *val2);
  57. bool int8ne(int64 *val1, int64 *val2);
  58. bool int8lt(int64 *val1, int64 *val2);
  59. bool int8gt(int64 *val1, int64 *val2);
  60. bool int8le(int64 *val1, int64 *val2);
  61. bool int8ge(int64 *val1, int64 *val2);
  62. bool int84eq(int64 *val1, int32 val2);
  63. bool int84ne(int64 *val1, int32 val2);
  64. bool int84lt(int64 *val1, int32 val2);
  65. bool int84gt(int64 *val1, int32 val2);
  66. bool int84le(int64 *val1, int32 val2);
  67. bool int84ge(int64 *val1, int32 val2);
  68. int64 *int8um(int64 *val);
  69. int64 *int8pl(int64 *val1, int64 *val2);
  70. int64 *int8mi(int64 *val1, int64 *val2);
  71. int64 *int8mul(int64 *val1, int64 *val2);
  72. int64 *int8div(int64 *val1, int64 *val2);
  73. int64 *int48(int32 val);
  74. int32 int84(int64 *val);
  75. int64 *dtoi8(float8 *val);
  76. float8 *i8tod(int64 *val);