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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * indexvalid.c
  4.  *   index tuple qualification validity checking code
  5.  *
  6.  * Copyright (c) 1994, Regents of the University of California
  7.  *
  8.  *
  9.  * IDENTIFICATION
  10.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/access/common/indexvalid.c,v 1.21.2.1 1999/08/02 05:24:25 scrappy Exp $
  11.  *
  12.  *-------------------------------------------------------------------------
  13.  */
  14. #include "postgres.h"
  15. #include "access/iqual.h"
  16. #include "executor/execdebug.h"
  17. /* ----------------------------------------------------------------
  18.  *   index scan key qualification code
  19.  * ----------------------------------------------------------------
  20.  */
  21. int NIndexTupleProcessed;
  22. /* ----------------
  23.  * index_keytest
  24.  *
  25.  * old comments
  26.  * May eventually combine with other tests (like timeranges)?
  27.  * Should have Buffer buffer; as an argument and pass it to amgetattr.
  28.  * ----------------
  29.  */
  30. bool
  31. index_keytest(IndexTuple tuple,
  32.   TupleDesc tupdesc,
  33.   int scanKeySize,
  34.   ScanKey key)
  35. {
  36. bool isNull;
  37. Datum datum;
  38. int test;
  39. IncrIndexProcessed();
  40. while (scanKeySize > 0)
  41. {
  42. datum = index_getattr(tuple,
  43.   key[0].sk_attno,
  44.   tupdesc,
  45.   &isNull);
  46. if (isNull)
  47. {
  48. /* XXX eventually should check if SK_ISNULL */
  49. return false;
  50. }
  51. if (key[0].sk_flags & SK_ISNULL)
  52. return false;
  53. if (key[0].sk_flags & SK_COMMUTE)
  54. {
  55. test = (*(fmgr_faddr(&key[0].sk_func)))
  56. (DatumGetPointer(key[0].sk_argument),
  57.  datum) ? 1 : 0;
  58. }
  59. else
  60. {
  61. test = (*(fmgr_faddr(&key[0].sk_func)))
  62. (datum,
  63.  DatumGetPointer(key[0].sk_argument)) ? 1 : 0;
  64. }
  65. if (!test == !(key[0].sk_flags & SK_NEGATE))
  66. return false;
  67. scanKeySize -= 1;
  68. key++;
  69. }
  70. return true;
  71. }