/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 440
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif

#ifndef __cmdtree_h__
#define __cmdtree_h__

#ifndef __ICommandTree_FWD_DEFINED__
#define __ICommandTree_FWD_DEFINED__
typedef struct ICommandTree ICommandTree;
#endif

#ifndef __IQuery_FWD_DEFINED__
#define __IQuery_FWD_DEFINED__
typedef struct IQuery IQuery;
#endif

#include "oledb.h"

#ifdef __cplusplus
extern "C"{
#endif

#ifndef __MIDL_user_allocate_free_DEFINED__
#define __MIDL_user_allocate_free_DEFINED__
  void *__RPC_API MIDL_user_allocate(size_t);
  void __RPC_API MIDL_user_free(void *);
#endif

#ifdef _WIN64
#include <pshpack8.h>
#else
#include <pshpack2.h>
#endif

  extern RPC_IF_HANDLE __MIDL_itf_cmdtree_0000_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_cmdtree_0000_v0_0_s_ifspec;

#ifndef __CommandTreeStructureDefinitions_INTERFACE_DEFINED__
#define __CommandTreeStructureDefinitions_INTERFACE_DEFINED__

  typedef WORD DBCOMMANDOP;

  enum DBCOMMANDOPENUM {
    DBOP_scalar_constant = 0,DBOP_DEFAULT = DBOP_scalar_constant + 1,DBOP_NULL = DBOP_DEFAULT + 1,DBOP_bookmark_name = DBOP_NULL + 1,
    DBOP_catalog_name = DBOP_bookmark_name + 1,DBOP_column_name = DBOP_catalog_name + 1,DBOP_schema_name = DBOP_column_name + 1,
    DBOP_outall_name = DBOP_schema_name + 1,DBOP_qualifier_name = DBOP_outall_name + 1,DBOP_qualified_column_name = DBOP_qualifier_name + 1,
    DBOP_table_name = DBOP_qualified_column_name + 1,DBOP_nested_table_name = DBOP_table_name + 1,DBOP_nested_column_name = DBOP_nested_table_name + 1,
    DBOP_row = DBOP_nested_column_name + 1,DBOP_table = DBOP_row + 1,DBOP_sort = DBOP_table + 1,DBOP_distinct = DBOP_sort + 1,
    DBOP_distinct_order_preserving = DBOP_distinct + 1,DBOP_alias = DBOP_distinct_order_preserving + 1,DBOP_cross_join = DBOP_alias + 1,
    DBOP_union_join = DBOP_cross_join + 1,DBOP_inner_join = DBOP_union_join + 1,DBOP_left_semi_join = DBOP_inner_join + 1,
    DBOP_right_semi_join = DBOP_left_semi_join + 1,DBOP_left_anti_semi_join = DBOP_right_semi_join + 1,
    DBOP_right_anti_semi_join = DBOP_left_anti_semi_join + 1,DBOP_left_outer_join = DBOP_right_anti_semi_join + 1,
    DBOP_right_outer_join = DBOP_left_outer_join + 1,DBOP_full_outer_join = DBOP_right_outer_join + 1,DBOP_natural_join = DBOP_full_outer_join + 1,
    DBOP_natural_left_outer_join = DBOP_natural_join + 1,DBOP_natural_right_outer_join = DBOP_natural_left_outer_join + 1,
    DBOP_natural_full_outer_join = DBOP_natural_right_outer_join + 1,DBOP_set_intersection = DBOP_natural_full_outer_join + 1,
    DBOP_set_union = DBOP_set_intersection + 1,DBOP_set_left_difference = DBOP_set_union + 1,DBOP_set_right_difference = DBOP_set_left_difference + 1,
    DBOP_set_anti_difference = DBOP_set_right_difference + 1,DBOP_bag_intersection = DBOP_set_anti_difference + 1,
    DBOP_bag_union = DBOP_bag_intersection + 1,DBOP_bag_left_difference = DBOP_bag_union + 1,DBOP_bag_right_difference = DBOP_bag_left_difference + 1,
    DBOP_bag_anti_difference = DBOP_bag_right_difference + 1,DBOP_division = DBOP_bag_anti_difference + 1,DBOP_relative_sampling = DBOP_division + 1,
    DBOP_absolute_sampling = DBOP_relative_sampling + 1,DBOP_transitive_closure = DBOP_absolute_sampling + 1,
    DBOP_recursive_union = DBOP_transitive_closure + 1,DBOP_aggregate = DBOP_recursive_union + 1,DBOP_remote_table = DBOP_aggregate + 1,
    DBOP_select = DBOP_remote_table + 1,DBOP_order_preserving_select = DBOP_select + 1,DBOP_project = DBOP_order_preserving_select + 1,
    DBOP_project_order_preserving = DBOP_project + 1,DBOP_top = DBOP_project_order_preserving + 1,DBOP_top_percent = DBOP_top + 1,
    DBOP_top_plus_ties = DBOP_top_percent + 1,DBOP_top_percent_plus_ties = DBOP_top_plus_ties + 1,DBOP_rank = DBOP_top_percent_plus_ties + 1,
    DBOP_rank_ties_equally = DBOP_rank + 1,DBOP_rank_ties_equally_and_skip = DBOP_rank_ties_equally + 1,
    DBOP_navigate = DBOP_rank_ties_equally_and_skip + 1,DBOP_nesting = DBOP_navigate + 1,DBOP_unnesting = DBOP_nesting + 1,
    DBOP_nested_apply = DBOP_unnesting + 1,DBOP_cross_tab = DBOP_nested_apply + 1,DBOP_is_NULL = DBOP_cross_tab + 1,DBOP_is_NOT_NULL = DBOP_is_NULL + 1,
    DBOP_equal = DBOP_is_NOT_NULL + 1,DBOP_not_equal = DBOP_equal + 1,DBOP_less = DBOP_not_equal + 1,DBOP_less_equal = DBOP_less + 1,
    DBOP_greater = DBOP_less_equal + 1,DBOP_greater_equal = DBOP_greater + 1,DBOP_equal_all = DBOP_greater_equal + 1,
    DBOP_not_equal_all = DBOP_equal_all + 1,DBOP_less_all = DBOP_not_equal_all + 1,DBOP_less_equal_all = DBOP_less_all + 1,
    DBOP_greater_all = DBOP_less_equal_all + 1,DBOP_greater_equal_all = DBOP_greater_all + 1,DBOP_equal_any = DBOP_greater_equal_all + 1,
    DBOP_not_equal_any = DBOP_equal_any + 1,DBOP_less_any = DBOP_not_equal_any + 1,DBOP_less_equal_any = DBOP_less_any + 1,
    DBOP_greater_any = DBOP_less_equal_any + 1,DBOP_greater_equal_any = DBOP_greater_any + 1,DBOP_anybits = DBOP_greater_equal_any + 1,
    DBOP_allbits = DBOP_anybits + 1,DBOP_anybits_any = DBOP_allbits + 1,DBOP_allbits_any = DBOP_anybits_any + 1,
    DBOP_anybits_all = DBOP_allbits_any + 1,DBOP_allbits_all = DBOP_anybits_all + 1,DBOP_between = DBOP_allbits_all + 1,
    DBOP_between_unordered = DBOP_between + 1,DBOP_match = DBOP_between_unordered + 1,DBOP_match_unique = DBOP_match + 1,
    DBOP_match_partial = DBOP_match_unique + 1,DBOP_match_partial_unique = DBOP_match_partial + 1,DBOP_match_full = DBOP_match_partial_unique + 1,
    DBOP_match_full_unique = DBOP_match_full + 1,DBOP_scalar_parameter = DBOP_match_full_unique + 1,DBOP_scalar_function = DBOP_scalar_parameter + 1,
    DBOP_plus = DBOP_scalar_function + 1,DBOP_minus = DBOP_plus + 1,DBOP_times = DBOP_minus + 1,DBOP_over = DBOP_times + 1,DBOP_div = DBOP_over + 1,
    DBOP_modulo = DBOP_div + 1,DBOP_power = DBOP_modulo + 1,DBOP_like = DBOP_power + 1,DBOP_sounds_like = DBOP_like + 1,
    DBOP_like_any = DBOP_sounds_like + 1,DBOP_like_all = DBOP_like_any + 1,DBOP_is_INVALID = DBOP_like_all + 1,DBOP_is_TRUE = DBOP_is_INVALID + 1,
    DBOP_is_FALSE = DBOP_is_TRUE + 1,DBOP_and = DBOP_is_FALSE + 1,DBOP_or = DBOP_and + 1,DBOP_xor = DBOP_or + 1,DBOP_equivalent = DBOP_xor + 1,
    DBOP_not = DBOP_equivalent + 1,DBOP_implies = DBOP_not + 1,DBOP_overlaps = DBOP_implies + 1,DBOP_case_condition = DBOP_overlaps + 1,
    DBOP_case_value = DBOP_case_condition + 1,DBOP_nullif = DBOP_case_value + 1,DBOP_cast = DBOP_nullif + 1,DBOP_coalesce = DBOP_cast + 1,
    DBOP_position = DBOP_coalesce + 1,DBOP_extract = DBOP_position + 1,DBOP_char_length = DBOP_extract + 1,DBOP_octet_length = DBOP_char_length + 1,
    DBOP_bit_length = DBOP_octet_length + 1,DBOP_substring = DBOP_bit_length + 1,DBOP_upper = DBOP_substring + 1,DBOP_lower = DBOP_upper + 1,
    DBOP_trim = DBOP_lower + 1,DBOP_translate = DBOP_trim + 1,DBOP_convert = DBOP_translate + 1,DBOP_string_concat = DBOP_convert + 1,
    DBOP_current_date = DBOP_string_concat + 1,DBOP_current_time = DBOP_current_date + 1,DBOP_current_timestamp = DBOP_current_time + 1,
    DBOP_content_select = DBOP_current_timestamp + 1,DBOP_content = DBOP_content_select + 1,DBOP_content_freetext = DBOP_content + 1,
    DBOP_content_proximity = DBOP_content_freetext + 1,DBOP_content_vector_or = DBOP_content_proximity + 1,DBOP_delete = DBOP_content_vector_or + 1,
    DBOP_update = DBOP_delete + 1,DBOP_insert = DBOP_update + 1,DBOP_min = DBOP_insert + 1,DBOP_max = DBOP_min + 1,DBOP_count = DBOP_max + 1,
    DBOP_sum = DBOP_count + 1,DBOP_avg = DBOP_sum + 1,DBOP_any_sample = DBOP_avg + 1,DBOP_stddev = DBOP_any_sample + 1,DBOP_stddev_pop = DBOP_stddev + 1,
    DBOP_var = DBOP_stddev_pop + 1,DBOP_var_pop = DBOP_var + 1,DBOP_first = DBOP_var_pop + 1,DBOP_last = DBOP_first + 1,DBOP_in = DBOP_last + 1,
    DBOP_exists = DBOP_in + 1,DBOP_unique = DBOP_exists + 1,DBOP_subset = DBOP_unique + 1,DBOP_proper_subset = DBOP_subset + 1,
    DBOP_superset = DBOP_proper_subset + 1,DBOP_proper_superset = DBOP_superset + 1,DBOP_disjoint = DBOP_proper_superset + 1,
    DBOP_pass_through = DBOP_disjoint + 1,DBOP_defined_by_GUID = DBOP_pass_through + 1,DBOP_text_command = DBOP_defined_by_GUID + 1,
    DBOP_SQL_select = DBOP_text_command + 1,DBOP_prior_command_tree = DBOP_SQL_select + 1,DBOP_add_columns = DBOP_prior_command_tree + 1,
    DBOP_column_list_anchor = DBOP_add_columns + 1,DBOP_column_list_element = DBOP_column_list_anchor + 1,
    DBOP_command_list_anchor = DBOP_column_list_element + 1,DBOP_command_list_element = DBOP_command_list_anchor + 1,
    DBOP_from_list_anchor = DBOP_command_list_element + 1,DBOP_from_list_element = DBOP_from_list_anchor + 1,
    DBOP_project_list_anchor = DBOP_from_list_element + 1,DBOP_project_list_element = DBOP_project_list_anchor + 1,
    DBOP_row_list_anchor = DBOP_project_list_element + 1,DBOP_row_list_element = DBOP_row_list_anchor + 1,
    DBOP_scalar_list_anchor = DBOP_row_list_element + 1,DBOP_scalar_list_element = DBOP_scalar_list_anchor + 1,
    DBOP_set_list_anchor = DBOP_scalar_list_element + 1,DBOP_set_list_element = DBOP_set_list_anchor + 1,
    DBOP_sort_list_anchor = DBOP_set_list_element + 1,DBOP_sort_list_element = DBOP_sort_list_anchor + 1,
    DBOP_alter_character_set = DBOP_sort_list_element + 1,DBOP_alter_collation = DBOP_alter_character_set + 1,
    DBOP_alter_domain = DBOP_alter_collation + 1,DBOP_alter_index = DBOP_alter_domain + 1,DBOP_alter_procedure = DBOP_alter_index + 1,
    DBOP_alter_schema = DBOP_alter_procedure + 1,DBOP_alter_table = DBOP_alter_schema + 1,DBOP_alter_trigger = DBOP_alter_table + 1,
    DBOP_alter_view = DBOP_alter_trigger + 1,DBOP_coldef_list_anchor = DBOP_alter_view + 1,DBOP_coldef_list_element = DBOP_coldef_list_anchor + 1,
    DBOP_create_assertion = DBOP_coldef_list_element + 1,DBOP_create_character_set = DBOP_create_assertion + 1,
    DBOP_create_collation = DBOP_create_character_set + 1,DBOP_create_domain = DBOP_create_collation + 1,DBOP_create_index = DBOP_create_domain + 1,
    DBOP_create_procedure = DBOP_create_index + 1,DBOP_create_schema = DBOP_create_procedure + 1,DBOP_create_synonym = DBOP_create_schema + 1,
    DBOP_create_table = DBOP_create_synonym + 1,DBOP_create_temporary_table = DBOP_create_table + 1,
    DBOP_create_translation = DBOP_create_temporary_table + 1,DBOP_create_trigger = DBOP_create_translation + 1,
    DBOP_create_view = DBOP_create_trigger + 1,DBOP_drop_assertion = DBOP_create_view + 1,DBOP_drop_character_set = DBOP_drop_assertion + 1,
    DBOP_drop_collation = DBOP_drop_character_set + 1,DBOP_drop_domain = DBOP_drop_collation + 1,DBOP_drop_index = DBOP_drop_domain + 1,
    DBOP_drop_procedure = DBOP_drop_index + 1,DBOP_drop_schema = DBOP_drop_procedure + 1,DBOP_drop_synonym = DBOP_drop_schema + 1,
    DBOP_drop_table = DBOP_drop_synonym + 1,DBOP_drop_translation = DBOP_drop_table + 1,DBOP_drop_trigger = DBOP_drop_translation + 1,
    DBOP_drop_view = DBOP_drop_trigger + 1,DBOP_foreign_key = DBOP_drop_view + 1,DBOP_grant_privileges = DBOP_foreign_key + 1,
    DBOP_index_list_anchor = DBOP_grant_privileges + 1,DBOP_index_list_element = DBOP_index_list_anchor + 1,
    DBOP_primary_key = DBOP_index_list_element + 1,DBOP_property_list_anchor = DBOP_primary_key + 1,
    DBOP_property_list_element = DBOP_property_list_anchor + 1,DBOP_referenced_table = DBOP_property_list_element + 1,
    DBOP_rename_object = DBOP_referenced_table + 1,DBOP_revoke_privileges = DBOP_rename_object + 1,
    DBOP_schema_authorization = DBOP_revoke_privileges + 1,DBOP_unique_key = DBOP_schema_authorization + 1,DBOP_scope_list_anchor = DBOP_unique_key + 1,
    DBOP_scope_list_element = DBOP_scope_list_anchor + 1,DBOP_content_table = DBOP_scope_list_element + 1
  };
#ifdef DBINITCONSTANTS
  extern const OLEDBDECLSPEC GUID DBGUID_LIKE_SQL = {0xc8b521f6,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}};
  extern const OLEDBDECLSPEC GUID DBGUID_LIKE_DOS = {0xc8b521f7,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}};
  extern const OLEDBDECLSPEC GUID DBGUID_LIKE_OFS = {0xc8b521f8,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}};
  extern const OLEDBDECLSPEC GUID DBGUID_LIKE_MAPI = {0xc8b521f9,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}};
#else
  extern const GUID DBGUID_LIKE_SQL;
  extern const GUID DBGUID_LIKE_DOS;
  extern const GUID DBGUID_LIKE_OFS;
  extern const GUID DBGUID_LIKE_MAPI;
#endif

  extern RPC_IF_HANDLE CommandTreeStructureDefinitions_v0_0_c_ifspec;
  extern RPC_IF_HANDLE CommandTreeStructureDefinitions_v0_0_s_ifspec;
#endif

#ifndef __ICommandTree_INTERFACE_DEFINED__
#define __ICommandTree_INTERFACE_DEFINED__

  typedef DWORD DBCOMMANDREUSE;
  enum DBCOMMANDREUSEENUM {
    DBCOMMANDREUSE_NONE = 0,DBCOMMANDREUSE_PROPERTIES = 0x1,DBCOMMANDREUSE_PARAMETERS = 0x2
  };
  typedef DWORD DBVALUEKIND;
  enum DBVALUEKINDENUM {
    DBVALUEKIND_BYGUID = 256,DBVALUEKIND_COLDESC = DBVALUEKIND_BYGUID + 1,DBVALUEKIND_ID = DBVALUEKIND_COLDESC + 1,
    DBVALUEKIND_CONTENT = DBVALUEKIND_ID + 1,DBVALUEKIND_CONTENTVECTOR = DBVALUEKIND_CONTENT + 1,DBVALUEKIND_GROUPINFO = DBVALUEKIND_CONTENTVECTOR + 1,
    DBVALUEKIND_PARAMETER = DBVALUEKIND_GROUPINFO + 1,DBVALUEKIND_PROPERTY = DBVALUEKIND_PARAMETER + 1,DBVALUEKIND_SETFUNC = DBVALUEKIND_PROPERTY + 1,
    DBVALUEKIND_SORTINFO = DBVALUEKIND_SETFUNC + 1,DBVALUEKIND_TEXT = DBVALUEKIND_SORTINFO + 1,DBVALUEKIND_COMMAND = DBVALUEKIND_TEXT + 1,
    DBVALUEKIND_MONIKER = DBVALUEKIND_COMMAND + 1,DBVALUEKIND_ROWSET = DBVALUEKIND_MONIKER + 1,DBVALUEKIND_LIKE = DBVALUEKIND_ROWSET + 1,
    DBVALUEKIND_CONTENTPROXIMITY = DBVALUEKIND_LIKE + 1,DBVALUEKIND_CONTENTSCOPE = DBVALUEKIND_CONTENTPROXIMITY + 1,
    DBVALUEKIND_CONTENTTABLE = DBVALUEKIND_CONTENTSCOPE + 1,DBVALUEKIND_IDISPATCH = 9,DBVALUEKIND_IUNKNOWN = 13,DBVALUEKIND_EMPTY = 0,
    DBVALUEKIND_NULL = 1,DBVALUEKIND_I2 = 2,DBVALUEKIND_I4 = 3,DBVALUEKIND_R4 = 4,DBVALUEKIND_R8 = 5,DBVALUEKIND_CY = 6,DBVALUEKIND_DATE = 7,
    DBVALUEKIND_BSTR = 8,DBVALUEKIND_ERROR = 10,DBVALUEKIND_BOOL = 11,DBVALUEKIND_VARIANT = 12,DBVALUEKIND_VECTOR = 0x1000,DBVALUEKIND_ARRAY = 0x2000,
    DBVALUEKIND_BYREF = 0x4000,DBVALUEKIND_I1 = 16,DBVALUEKIND_UI1 = 17,DBVALUEKIND_UI2 = 18,DBVALUEKIND_UI4 = DBVALUEKIND_UI2 + 1,
    DBVALUEKIND_I8 = DBVALUEKIND_UI4 + 1,DBVALUEKIND_UI8 = DBVALUEKIND_I8 + 1,DBVALUEKIND_GUID = 72,DBVALUEKIND_BYTES = 128,DBVALUEKIND_STR = 129,
    DBVALUEKIND_WSTR = 130,DBVALUEKIND_NUMERIC = 131,DBVALUEKIND_DBDATE = 133,DBVALUEKIND_DBTIME = 134,DBVALUEKIND_DBTIMESTAMP = 135,
    DBVALUEKIND_PROBABILISTIC = 136,DBVALUEKIND_RELEVANTDOCUMENT = 137
  };
  typedef struct tagDBBYGUID {
    BYTE *pbInfo;
    DBLENGTH cbInfo;
    GUID guid;
  } DBBYGUID;

#define GENERATE_METHOD_EXACT (0)
#define GENERATE_METHOD_PREFIX (1)
#define GENERATE_METHOD_INFLECT (2)

  typedef struct tagDBCONTENT {
    LPOLESTR pwszPhrase;
    DWORD dwGenerateMethod;
    LONG lWeight;
    LCID lcid;
  } DBCONTENT;

#define SCOPE_FLAG_MASK (0x000000ff)
#define SCOPE_FLAG_INCLUDE (0x00000001)
#define SCOPE_FLAG_DEEP (0x00000002)
#define SCOPE_TYPE_MASK (0xffffff00)
#define SCOPE_TYPE_WINPATH (0x00000100)
#define SCOPE_TYPE_VPATH (0x00000200)

  typedef struct tagDBCONTENTSCOPE {
    DWORD dwFlags;
    LPOLESTR *rgpwszTagName;
    LPOLESTR pwszElementValue;
  } DBCONTENTSCOPE;

  typedef struct tagDBCONTENTTABLE {
    LPOLESTR pwszMachine;
    LPOLESTR pwszCatalog;
  } DBCONTENTTABLE;

#define PROPID_QUERY_RANKVECTOR (0x2)
#define PROPID_QUERY_RANK (0x3)
#define PROPID_QUERY_HITCOUNT (0x4)
#define PROPID_QUERY_ALL (0x6)
#define PROPID_STG_CONTENTS (0x13)
#define VECTOR_RANK_MIN (0)
#define VECTOR_RANK_MAX (1)
#define VECTOR_RANK_INNER (2)
#define VECTOR_RANK_DICE (3)
#define VECTOR_RANK_JACCARD (4)

  typedef struct tagDBCONTENTVECTOR {
    LONG lWeight;
    DWORD dwRankingMethod;
  } DBCONTENTVECTOR;

  typedef struct tagDBGROUPINFO {
    LCID lcid;
  } DBGROUPINFO;

  typedef struct tagDBPARAMETER {
    LPOLESTR pwszName;
    ITypeInfo *pTypeInfo;
    DB_NUMERIC *pNum;
    DBLENGTH cbMaxLength;
    DBPARAMFLAGS dwFlags;
    DBTYPE wType;
  } DBPARAMETER;

#define DBSETFUNC_NONE 0x0
#define DBSETFUNC_ALL 0x1
#define DBSETFUNC_DISTINCT 0x2

  typedef struct tagDBSETFUNC {
    DWORD dwSetQuantifier;
  } DBSETFUNC;

  typedef struct tagDBSORTINFO {
    WINBOOL fDesc;
    LCID lcid;
  } DBSORTINFO;

  typedef struct tagDBTEXT {
    LPOLESTR pwszText;
    ULONG ulErrorLocator;
    ULONG ulTokenLength;
    GUID guidDialect;
  } DBTEXT;

  typedef struct tagDBLIKE {
    LONG lWeight;
    GUID guidDialect;
  } DBLIKE;

#define PROXIMITY_UNIT_WORD (0)
#define PROXIMITY_UNIT_SENTENCE (1)
#define PROXIMITY_UNIT_PARAGRAPH (2)
#define PROXIMITY_UNIT_CHAPTER (3)

  typedef struct tagDBCONTENTPROXIMITY {
    DWORD dwProximityUnit;
    ULONG ulProximityDistance;
    LONG lWeight;
  } DBCONTENTPROXIMITY;

  typedef struct tagDBPROBABILISTIC {
    LONG lWeight;
    float flK1;
    float flK2;
    float flK3;
    float flB;
  } DBPROBABILISTIC;

  typedef struct tagDBRELEVANTDOCUMENT {
    LONG lWeight;
    VARIANT vDocument;
  } DBRELEVANTDOCUMENT;

  typedef struct tagDBCOMMANDTREE {
    DBCOMMANDOP op;
    WORD wKind;
    struct tagDBCOMMANDTREE *pctFirstChild;
    struct tagDBCOMMANDTREE *pctNextSibling;
    union {
      __MINGW_EXTENSION __int64 llValue;
      __MINGW_EXTENSION unsigned __int64 ullValue;
      WINBOOL fValue;
      unsigned char uchValue;
      signed char schValue;
      unsigned short usValue;
      short sValue;
      LPOLESTR pwszValue;
      LONG lValue;
      ULONG ulValue;
      float flValue;
      double dblValue;
      CY cyValue;
      DATE dateValue;
      DBDATE dbdateValue;
      DBTIME dbtimeValue;
      SCODE scodeValue;
      BSTR *pbstrValue;
      ICommand *pCommand;
      IDispatch *pDispatch;
      IMoniker *pMoniker;
      IRowset *pRowset;
      IUnknown *pUnknown;
      DBBYGUID *pdbbygdValue;
      DBCOLUMNDESC *pcoldescValue;
      DBID *pdbidValue;
      DBLIKE *pdblikeValue;
      DBCONTENT *pdbcntntValue;
      DBCONTENTSCOPE *pdbcntntscpValue;
      DBCONTENTTABLE *pdbcntnttblValue;
      DBCONTENTVECTOR *pdbcntntvcValue;
      DBCONTENTPROXIMITY *pdbcntntproxValue;
      DBGROUPINFO *pdbgrpinfValue;
      DBPARAMETER *pdbparamValue;
      DBPROPSET *pdbpropValue;
      DBSETFUNC *pdbstfncValue;
      DBSORTINFO *pdbsrtinfValue;
      DBTEXT *pdbtxtValue;
      DBVECTOR *pdbvectorValue;
      SAFEARRAY *parrayValue;
      VARIANT *pvarValue;
      GUID *pGuid;
      BYTE *pbValue;
      char *pzValue;
      DB_NUMERIC *pdbnValue;
      DBTIMESTAMP *pdbtsValue;
      void *pvValue;
      DBPROBABILISTIC *pdbprobValue;
      DBRELEVANTDOCUMENT *pdbreldocValue;
    } value;
    HRESULT hrError;
  } DBCOMMANDTREE;

  EXTERN_C const IID IID_ICommandTree;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ICommandTree : public IUnknown {
  public:
    virtual HRESULT WINAPI FindErrorNodes(const DBCOMMANDTREE *pRoot,ULONG *pcErrorNodes,DBCOMMANDTREE ***prgErrorNodes) = 0;
    virtual HRESULT WINAPI FreeCommandTree(DBCOMMANDTREE **ppRoot) = 0;
    virtual HRESULT WINAPI GetCommandTree(DBCOMMANDTREE **ppRoot) = 0;
    virtual HRESULT WINAPI SetCommandTree(DBCOMMANDTREE **ppRoot,DBCOMMANDREUSE dwCommandReuse,WINBOOL fCopy) = 0;
  };
#else
  typedef struct ICommandTreeVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ICommandTree *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ICommandTree *This);
      ULONG (WINAPI *Release)(ICommandTree *This);
      HRESULT (WINAPI *FindErrorNodes)(ICommandTree *This,const DBCOMMANDTREE *pRoot,ULONG *pcErrorNodes,DBCOMMANDTREE ***prgErrorNodes);
      HRESULT (WINAPI *FreeCommandTree)(ICommandTree *This,DBCOMMANDTREE **ppRoot);
      HRESULT (WINAPI *GetCommandTree)(ICommandTree *This,DBCOMMANDTREE **ppRoot);
      HRESULT (WINAPI *SetCommandTree)(ICommandTree *This,DBCOMMANDTREE **ppRoot,DBCOMMANDREUSE dwCommandReuse,WINBOOL fCopy);
    END_INTERFACE
  } ICommandTreeVtbl;
  struct ICommandTree {
    CONST_VTBL struct ICommandTreeVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ICommandTree_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICommandTree_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICommandTree_Release(This) (This)->lpVtbl->Release(This)
#define ICommandTree_FindErrorNodes(This,pRoot,pcErrorNodes,prgErrorNodes) (This)->lpVtbl->FindErrorNodes(This,pRoot,pcErrorNodes,prgErrorNodes)
#define ICommandTree_FreeCommandTree(This,ppRoot) (This)->lpVtbl->FreeCommandTree(This,ppRoot)
#define ICommandTree_GetCommandTree(This,ppRoot) (This)->lpVtbl->GetCommandTree(This,ppRoot)
#define ICommandTree_SetCommandTree(This,ppRoot,dwCommandReuse,fCopy) (This)->lpVtbl->SetCommandTree(This,ppRoot,dwCommandReuse,fCopy)
#endif
#endif
  HRESULT WINAPI ICommandTree_FindErrorNodes_Proxy(ICommandTree *This,const DBCOMMANDTREE *pRoot,ULONG *pcErrorNodes,DBCOMMANDTREE ***prgErrorNodes);
  void __RPC_STUB ICommandTree_FindErrorNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ICommandTree_FreeCommandTree_Proxy(ICommandTree *This,DBCOMMANDTREE **ppRoot);
  void __RPC_STUB ICommandTree_FreeCommandTree_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ICommandTree_GetCommandTree_Proxy(ICommandTree *This,DBCOMMANDTREE **ppRoot);
  void __RPC_STUB ICommandTree_GetCommandTree_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ICommandTree_SetCommandTree_Proxy(ICommandTree *This,DBCOMMANDTREE **ppRoot,DBCOMMANDREUSE dwCommandReuse,WINBOOL fCopy);
  void __RPC_STUB ICommandTree_SetCommandTree_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IQuery_INTERFACE_DEFINED__
#define __IQuery_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IQuery;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IQuery : public ICommandTree {
  public:
    virtual HRESULT WINAPI AddPostProcessing(DBCOMMANDTREE **ppRoot,WINBOOL fCopy) = 0;
    virtual HRESULT WINAPI GetCardinalityEstimate(DBORDINAL *pulCardinality) = 0;
  };
#else
  typedef struct IQueryVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IQuery *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IQuery *This);
      ULONG (WINAPI *Release)(IQuery *This);
      HRESULT (WINAPI *FindErrorNodes)(IQuery *This,const DBCOMMANDTREE *pRoot,ULONG *pcErrorNodes,DBCOMMANDTREE ***prgErrorNodes);
      HRESULT (WINAPI *FreeCommandTree)(IQuery *This,DBCOMMANDTREE **ppRoot);
      HRESULT (WINAPI *GetCommandTree)(IQuery *This,DBCOMMANDTREE **ppRoot);
      HRESULT (WINAPI *SetCommandTree)(IQuery *This,DBCOMMANDTREE **ppRoot,DBCOMMANDREUSE dwCommandReuse,WINBOOL fCopy);
      HRESULT (WINAPI *AddPostProcessing)(IQuery *This,DBCOMMANDTREE **ppRoot,WINBOOL fCopy);
      HRESULT (WINAPI *GetCardinalityEstimate)(IQuery *This,DBORDINAL *pulCardinality);
    END_INTERFACE
  } IQueryVtbl;
  struct IQuery {
    CONST_VTBL struct IQueryVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IQuery_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IQuery_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IQuery_Release(This) (This)->lpVtbl->Release(This)
#define IQuery_FindErrorNodes(This,pRoot,pcErrorNodes,prgErrorNodes) (This)->lpVtbl->FindErrorNodes(This,pRoot,pcErrorNodes,prgErrorNodes)
#define IQuery_FreeCommandTree(This,ppRoot) (This)->lpVtbl->FreeCommandTree(This,ppRoot)
#define IQuery_GetCommandTree(This,ppRoot) (This)->lpVtbl->GetCommandTree(This,ppRoot)
#define IQuery_SetCommandTree(This,ppRoot,dwCommandReuse,fCopy) (This)->lpVtbl->SetCommandTree(This,ppRoot,dwCommandReuse,fCopy)
#define IQuery_AddPostProcessing(This,ppRoot,fCopy) (This)->lpVtbl->AddPostProcessing(This,ppRoot,fCopy)
#define IQuery_GetCardinalityEstimate(This,pulCardinality) (This)->lpVtbl->GetCardinalityEstimate(This,pulCardinality)
#endif
#endif
  HRESULT WINAPI IQuery_AddPostProcessing_Proxy(IQuery *This,DBCOMMANDTREE **ppRoot,WINBOOL fCopy);
  void __RPC_STUB IQuery_AddPostProcessing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IQuery_GetCardinalityEstimate_Proxy(IQuery *This,DBORDINAL *pulCardinality);
  void __RPC_STUB IQuery_GetCardinalityEstimate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#include <poppack.h>

  extern RPC_IF_HANDLE __MIDL_itf_cmdtree_0359_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_cmdtree_0359_v0_0_s_ifspec;

#ifdef __cplusplus
}
#endif
#endif
