ScanFilter.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef SCAN_FILTER_HPP
  14. #define SCAN_FILTER_HPP
  15. class ScanFilter {
  16. public:
  17. #if 0
  18.   /**
  19.    * Create a scan filter for table tab
  20.    * colNo - column to filter on
  21.    * val - val to use when selecting valu to filter on
  22.    *
  23.    */
  24.   ScanFilter(const NDBT_Table& tab, 
  25.      int colNo,
  26.      int val);
  27. #endif
  28.   ScanFilter(int records = 1000){};
  29.   virtual int filterOp(NdbOperation*) = 0;
  30.   virtual int verifyRecord(NDBT_ResultRow&) = 0;
  31. private:
  32.   //  const NDBT_Table& tab;
  33. };
  34. class LessThanFilter : public ScanFilter {
  35. public:
  36.   LessThanFilter(int records){ compare_value = records / 100; };
  37. private:
  38.   Uint32 compare_value;
  39.   int filterOp(NdbOperation* pOp);
  40.   int verifyRecord(NDBT_ResultRow&);
  41. };
  42. class EqualFilter : public ScanFilter {
  43.   static const Uint32 compare_value = 100;
  44.   int filterOp(NdbOperation* pOp);
  45.   int verifyRecord(NDBT_ResultRow&);
  46. };
  47. class NoFilter : public ScanFilter {
  48.   int filterOp(NdbOperation* pOp);
  49.   int verifyRecord(NDBT_ResultRow&);
  50. };
  51. int LessThanFilter::filterOp(NdbOperation* pOp){
  52.   
  53.   if (pOp->load_const_u32(1, compare_value) != 0)
  54.     return NDBT_FAILED;
  55.   if (pOp->read_attr("KOL2", 2) != 0)
  56.     return NDBT_FAILED;
  57.   if (pOp->branch_lt(1, 2, 0) != 0)
  58.     return NDBT_FAILED;
  59.   if (pOp->interpret_exit_nok() != 0)
  60.     return NDBT_FAILED;
  61.   
  62.   if (pOp->def_label(0) != 0)
  63.     return NDBT_FAILED;
  64.   if (pOp->interpret_exit_ok() != 0)
  65.     return NDBT_FAILED;
  66.   return NDBT_OK;
  67. }
  68. int LessThanFilter::verifyRecord(NDBT_ResultRow& row){
  69.   NdbRecAttr* rec = row.attributeStore(1);
  70.   if (rec->u_32_value() < compare_value)
  71.     return NDBT_OK;
  72.   return NDBT_FAILED;
  73. }
  74. int EqualFilter::filterOp(NdbOperation* pOp){
  75.   
  76.   if (pOp->load_const_u32(1, compare_value) != 0)
  77.     return NDBT_FAILED;
  78.   if (pOp->read_attr("KOL2", 2) != 0)
  79.     return NDBT_FAILED;
  80.   if (pOp->branch_eq(1, 2, 0) != 0)
  81.     return NDBT_FAILED;
  82.   if (pOp->interpret_exit_nok() != 0)
  83.     return NDBT_FAILED;
  84.   
  85.   if (pOp->def_label(0) != 0)
  86.     return NDBT_FAILED;
  87.   if (pOp->interpret_exit_ok() != 0)
  88.     return NDBT_FAILED;
  89.   return NDBT_OK;
  90. }
  91. int EqualFilter::verifyRecord(NDBT_ResultRow& row){
  92.   NdbRecAttr* rec = row.attributeStore(1);
  93.   if (rec->u_32_value() == compare_value)
  94.     return NDBT_OK;
  95.   return NDBT_FAILED;
  96. }
  97. int NoFilter::filterOp(NdbOperation* pOp){
  98.   return NDBT_OK;
  99. }
  100. int NoFilter::verifyRecord(NDBT_ResultRow& row){
  101.   // Check if this record should be in the result set or not
  102.   return NDBT_OK;
  103. }
  104. #endif