📄 swq.h
字号:
/****************************************************************************** * * Component: OGDI Driver Support Library * Purpose: Generic SQL WHERE Expression Evaluator Declarations. * Author: Frank Warmerdam <warmerdam@pobox.com> * ****************************************************************************** * Copyright (C) 2001 Information Interoperability Institute (3i) * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies, that * both the copyright notice and this permission notice appear in * supporting documentation, and that the name of 3i not be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission. 3i makes no * representations about the suitability of this software for any purpose. * It is provided "as is" without express or implied warranty. ****************************************************************************** * * $Log: swq.h,v $ * Revision 1.8 2003/03/05 05:08:28 warmerda * added preliminary support for joins * * Revision 1.7 2002/04/29 19:32:47 warmerda * added swq_select_parse, fix problem with where parsing and sorting code * * Revision 1.6 2002/04/25 19:32:06 warmerda * added swq_select_reform_command * * Revision 1.5 2002/04/25 16:06:57 warmerda * added more general distinct support * * Revision 1.4 2002/04/23 20:05:23 warmerda * added SELECT statement parsing * * Revision 1.3 2002/04/19 20:46:06 warmerda * added [NOT] IN, [NOT] LIKE and IS [NOT] NULL support * * Revision 1.2 2001/07/19 18:25:07 warmerda * expanded tabs * * Revision 1.1 2001/06/19 15:46:30 warmerda * New * */#ifndef _SWQ_H_INCLUDED_#define _SWQ_H_INCLUDED_typedef enum { SWQ_OR, SWQ_AND, SWQ_NOT, SWQ_EQ, SWQ_NE, SWQ_GE, SWQ_LE, SWQ_LT, SWQ_GT, SWQ_LIKE, SWQ_NOTLIKE, SWQ_ISNULL, SWQ_ISNOTNULL, SWQ_IN, SWQ_NOTIN, SWQ_UNKNOWN} swq_op;typedef enum { SWQ_INTEGER, SWQ_FLOAT, SWQ_STRING, SWQ_BOOLEAN, SWQ_OTHER} swq_field_type;typedef struct { swq_op operation; /* only for logical expression on subexpression */ struct swq_node_s *first_sub_expr; struct swq_node_s *second_sub_expr; /* only for binary field operations */ int field_index; int table_index; swq_field_type field_type; char *string_value; int int_value; double float_value;} swq_field_op;typedef swq_field_op swq_expr;typedef int (*swq_op_evaluator)(swq_field_op *op, void *record_handle);typedef struct { char *data_source; char *table_name; char *table_alias;} swq_table_def;typedef struct { int count; char **names; swq_field_type *types; int *table_ids; int *ids; int table_count; swq_table_def *table_defs;} swq_field_list;/* Compile an SQL WHERE clause into an internal form. The field_list is** the list of fields in the target 'table', used to render where into ** field numbers instead of names. */const char *swq_expr_compile( const char *where_clause, int field_count, char **field_list, swq_field_type *field_types, swq_expr **expr );const char *swq_expr_compile2( const char *where_clause, swq_field_list *field_list, swq_expr **expr );/*** Evaluate an expression for a particular record using an application** provided field operation evaluator, and abstract record handle. */int swq_expr_evaluate( swq_expr *expr, swq_op_evaluator fn_evaluator, void *record_handle );void swq_expr_free( swq_expr * );int swq_test_like( const char *input, const char *pattern );/****************************************************************************/#define SWQP_ALLOW_UNDEFINED_COL_FUNCS 0x01#define SWQM_SUMMARY_RECORD 1#define SWQM_RECORDSET 2#define SWQM_DISTINCT_LIST 3typedef enum { SWQCF_NONE, SWQCF_AVG, SWQCF_MIN, SWQCF_MAX, SWQCF_COUNT, SWQCF_SUM, SWQCF_CUSTOM} swq_col_func;typedef struct { swq_col_func col_func; char *col_func_name; char *field_name; int table_index; int field_index; swq_field_type field_type; int distinct_flag;} swq_col_def;typedef struct { int count; char **distinct_list; double sum; double min; double max;} swq_summary;typedef struct { char *field_name; int table_index; int field_index; int ascending_flag;} swq_order_def;typedef struct { int secondary_table; char *primary_field_name; int primary_field; swq_op op; char *secondary_field_name; int secondary_field;} swq_join_def;typedef struct { int query_mode; char *raw_select; int result_columns; swq_col_def *column_defs; swq_summary *column_summary; int table_count; swq_table_def *table_defs; int join_count; swq_join_def *join_defs; char *whole_where_clause; swq_expr *where_expr; int order_specs; swq_order_def *order_defs; } swq_select;const char *swq_select_preparse( const char *select_statement, swq_select **select_info );const char *swq_select_expand_wildcard( swq_select *select_info, swq_field_list *field_list );const char *swq_select_parse( swq_select *select_info, swq_field_list *field_list, int parse_flags );void swq_select_free( swq_select *select_info );const char *swq_reform_command( swq_select *select_info );void swq_free( void * );void *swq_malloc( int );const char *swq_select_finish_summarize( swq_select *select_info );const char *swq_select_summarize( swq_select *select_info, int dest_column, const char *value );#endif /* def _SWQ_H_INCLUDED_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -