Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 205 lines (161 sloc) 6.375 kb
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 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
////////////////////////////////////////////////////////////////////////////////
/// @brief where conditions
///
/// @file
///
/// DISCLAIMER
///
/// Copyright 2010-2012 triagens GmbH, Cologne, Germany
///
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file except in compliance with the License.
/// You may obtain a copy of the License at
///
/// http://www.apache.org/licenses/LICENSE-2.0
///
/// Unless required by applicable law or agreed to in writing, software
/// distributed under the License is distributed on an "AS IS" BASIS,
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
///
/// Copyright holder is triAGENS GmbH, Cologne, Germany
///
/// @author Dr. Frank Celler
/// @author Jan Steemann
/// @author Copyright 2012, triagens GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////

#ifndef TRIAGENS_DURHAM_VOC_BASE_WHERE_H
#define TRIAGENS_DURHAM_VOC_BASE_WHERE_H 1

#include "VocBase/vocbase.h"
#include "VocBase/document-collection.h"
#include "VocBase/index.h"
#include "VocBase/query-context.h"

#ifdef __cplusplus
extern "C" {
#endif

////////////////////////////////////////////////////////////////////////////////
/// @addtogroup VocBase
/// @{
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
/// @brief where clause type
////////////////////////////////////////////////////////////////////////////////

typedef enum {
  TRI_QRY_WHERE_BOOLEAN,
  TRI_QRY_WHERE_GENERAL,
  TRI_QRY_WHERE_HASH_CONSTANT,
  TRI_QRY_WHERE_PRIORITY_QUEUE_CONSTANT,
  TRI_QRY_WHERE_SKIPLIST_CONSTANT,
  TRI_QRY_WHERE_WITHIN_CONSTANT,
  TRI_QRY_WHERE_PRIMARY_CONSTANT
}
TRI_qry_where_type_e;

////////////////////////////////////////////////////////////////////////////////
/// @brief abstract where clause
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_s {
  TRI_qry_where_type_e _type;

  struct TRI_qry_where_s* (*clone) (struct TRI_qry_where_s const*);
  void (*free) (struct TRI_qry_where_s*);
}
TRI_qry_where_t;

////////////////////////////////////////////////////////////////////////////////
/// @brief abstract where clause for conditions
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_cond_s {
  TRI_qry_where_t base;
}
TRI_qry_where_cond_t;

////////////////////////////////////////////////////////////////////////////////
/// @brief constant where clause
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_boolean_s {
  TRI_qry_where_cond_t base;

  bool _value;
}
TRI_qry_where_boolean_t;

////////////////////////////////////////////////////////////////////////////////
/// @brief JavaScript where clause
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_general_s {
  TRI_qry_where_cond_t base;

  char* _code;
}
TRI_qry_where_general_t;

////////////////////////////////////////////////////////////////////////////////
/// @brief abstract primary index where clause
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_primary_s {
  TRI_qry_where_t base;

  TRI_voc_did_t (*did) (struct TRI_qry_where_primary_s*, TRI_rc_context_t*);
}
TRI_qry_where_primary_t;

////////////////////////////////////////////////////////////////////////////////
/// @brief primary index where clause with a constant document identifier
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_primary_const_s {
  TRI_qry_where_primary_t base;

  TRI_voc_did_t _did;
}
TRI_qry_where_primary_const_t;

////////////////////////////////////////////////////////////////////////////////
/// @brief geo index where clause
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_within_s {
  TRI_qry_where_t base;

  TRI_idx_iid_t _iid;
  char* _nameDistance;

  double* (*coordinates) (struct TRI_qry_where_within_s*, TRI_rc_context_t*);
  double (*radius) (struct TRI_qry_where_within_s*, TRI_rc_context_t*);
}
TRI_qry_where_within_t;

////////////////////////////////////////////////////////////////////////////////
/// @brief geo index where clause with a constant document identifier
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_within_const_s {
  TRI_qry_where_within_t base;

  double _coordinates[2];
  double _radius;
}
TRI_qry_where_within_const_t;


////////////////////////////////////////////////////////////////////////////////
/// @brief hash index where
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_hash_const_s {
  TRI_qry_where_t base;
  TRI_idx_iid_t _iid;
  TRI_json_t* _parameters; // a json list object
}
TRI_qry_where_hash_const_t;



////////////////////////////////////////////////////////////////////////////////
/// @brief skiplist index where
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_priorityqueue_const_s {
  TRI_qry_where_t base;
  TRI_idx_iid_t _iid;
  TRI_json_t* _parameters;
}
TRI_qry_where_priorityqueue_const_t;


////////////////////////////////////////////////////////////////////////////////
/// @brief skiplist index where
////////////////////////////////////////////////////////////////////////////////

typedef struct TRI_qry_where_skiplist_const_s {
  TRI_qry_where_t base;
  TRI_idx_iid_t _iid;
  //TRI_json_t* _parameters;
  // simple operator
  TRI_sl_operator_t* _operator;
}
TRI_qry_where_skiplist_const_t;

////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////

#ifdef __cplusplus
}
#endif

#endif

// Local Variables:
// mode: outline-minor
// outline-regexp: "^\\(/// @brief\\|/// {@inheritDoc}\\|/// @addtogroup\\|// --SECTION--\\|/// @\\}\\)"
// End:
Something went wrong with that request. Please try again.