~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/* Copyright (C) 2003 MySQL AB

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; version 2 of the License.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */

#ifndef NDBT_DATA_SET_HPP
#define NDBT_DATA_SET_HPP

#include "NDBT_Table.hpp"
#include <NdbApi.hpp>

class NDBT_DataSet;

class NDBT_DataSetFactory {
public:
  NDBT_DataSet * createEmpty(const NDBT_Table & table, 
			     const char * columns[]);
  
  NDBT_DataSet * createRandom(const NDBT_DataSet & table, 
			      const char * columns[],
			      int rows);
  
  NDBT_DataSet * createXXX(int noOfDS, const NDBT_DataSet ** datasets);
};

class NDBT_DataSet {
  friend class NDBT_DataSetFactory;
public:
  /**
   * Rows in the data set
   */
  void setRows(int rows);
  void addRows(int rows);
  
  int getNoOfRows() const;

  /**
   * Columns for a row in the data set
   */
  int getNoOfColumns() const;
  int getNoOfPKs() const;
  
  const NDBT_Attribute * getColumn(int index);
  const NDBT_Attribute * getColumn(const char * name);
  
  /**
   * Data status in dataset
   */
  bool hasPK(int row);
  bool hasData(int row);

  /**
   * Do all rows in the dataset have a PK
   */
  bool hasPK();
  
  /**
   * Do all rows in the dataset has data
   */
  bool hasData();
  
  /**
   * Getters for data
   */
  Uint32 getUInt(int row, int index) const;
  Uint32 getUInt(int row, const char * attribute) const;
  
  Int32 getInt(int row, int index) const;
  Int32 getInt(int row, const char * attribute) const;
  
  const char * getString(int row, int index) const;
  const char * getString(int row, const char * attribute) const;

  bool getIsNull(int row, int index) const;
  bool getIsNull(int row, const char * attribute) const;
  
  /**
   * Setters for data
   */
  void set(int row, int index, Int32 value);
  void set(int row, const char * attr, Int32 value);
  
  void set(int row, int index, Uint32 value);
  void set(int row, const char * attr, Uint32 value);
  
  void set(int row, int index, const char * value);
  void set(int row, const char * attr, const char * value);

  /**
   * Comparators
   */

  /**
   * Is this dataset identical to other dataset
   *
   * If either of the datasets have "undefined" rows the answer is false
   */
  bool equal(const NDBT_DataSet & other) const;
  
  /**
   * Do these dataset have identical PK's
   *
   * I.e noOfRows equal
   *
   * and for each row there is a corresponding row in the other ds
   *     with the same pk
   */
  bool equalPK(const NDBT_DataSet & other) const;

private:
  NDBT_Attribute * columns;
  
  Uint32 noOfRows;
  Uint32 noOfPKs;
  
  Uint32 * pks;
  Uint32 * columnSizes;
  
  char * pkData;
  char * data;

  char * pk(int row, int pkIndex);
  char * column(int row, int columnIndex);

  Uint32 * hasPK;
  Uint32 * hasData;
};

#endif