/* -Header_File SpiceEK.h ( CSPICE EK-specific definitions ) -Abstract Perform CSPICE EK-specific definitions, including macros and user- defined types. -Copyright Copyright (1999), California Institute of Technology. U.S. Government sponsorship acknowledged. -Required_Reading None. -Particulars This header defines macros, enumerated types, structures, and typedefs that may be referenced in application code that calls CSPICE EK functions. Macros ====== General limits -------------- Name Description ---- ---------- SPICE_EK_MXCLSG Maximum number of columns per segment. SPICE_EK_TYPLEN Maximum length of a short string indicating a data type (one of {"CHR", "DP", "INT", "TIME"}). Such strings are returned by some of the Fortran SPICELIB EK routines, hence also by their f2c'd counterparts. Sizes of EK objects ------------------- Name Description ---- ---------- SPICE_EK_CNAMSZ Maximum length of column name. SPICE_EK_CSTRLN Length of string required to hold column name. SPICE_EK_TNAMSZ Maximum length of table name. SPICE_EK_TSTRLN Length of string required to hold table name. Query-related limits -------------------- Name Description ---- ---------- SPICE_EK_MAXQRY Maximum length of an input query. This value is currently equivalent to twenty-five 80-character lines. SPICE_EK_MAXQSEL Maximum number of columns that may be listed in the `SELECT clause' of a query. SPICE_EK_MAXQTAB Maximum number of tables that may be listed in the `FROM clause' of a query. SPICE_EK_MAXQCON Maximum number of relational expressions that may be listed in the `constraint clause' of a query. This limit applies to a query when it is represented in `normalized form': that is, the constraints have been expressed as a disjunction of conjunctions of relational expressions. The number of relational expressions in a query that has been expanded in this fashion may be greater than the number of relations in the query as orginally written. For example, the expression ( ( A LT 1 ) OR ( B GT 2 ) ) AND ( ( C NE 3 ) OR ( D EQ 4 ) ) which contains 4 relational expressions, expands to the equivalent normalized constraint ( ( A LT 1 ) AND ( C NE 3 ) ) OR ( ( A LT 1 ) AND ( D EQ 4 ) ) OR ( ( B GT 2 ) AND ( C NE 3 ) ) OR ( ( B GT 2 ) AND ( D EQ 4 ) ) which contains eight relational expressions. SPICE_EK_MAXQJOIN Maximum number of tables that can be joined. SPICE_EK_MAXQJCON Maximum number of join constraints allowed. SPICE_EK_MAXQORD Maximum number of columns that may be used in the `order-by clause' of a query. SPICE_EK_MAXQTOK Maximum number of tokens in a query. Tokens are reserved words, column names, parentheses, and values. Literal strings and time values count as single tokens. SPICE_EK_MAXQNUM Maximum number of numeric tokens in a query. SPICE_EK_MAXQCLN Maximum total length of character tokens in a query. SPICE_EK_MAXQSTR Maximum length of literal string values allowed in queries. Codes ----- Name Description ---- ---------- SPICE_EK_VARSIZ Code used to indicate variable-size objects. Usually this is used in a context where a non-negative integer indicates the size of a fixed-size object and the presence of this code indicates a variable-size object. The value of this constant must match the parameter IFALSE used in the Fortran library SPICELIB. Enumerated Types ================ Enumerated code values ---------------------- Name Description ---- ---------- SpiceEKDataType Codes for data types used in the EK interface: character, double precision, integer, and "time." The values are: { SPICE_CHR = 0, SPICE_DP = 1, SPICE_INT = 2, SPICE_TIME = 3 } SpiceEKExprClass Codes for types of expressions that may appear in the SELECT clause of EK queries. Values and meanings are: SPICE_EK_EXP_COL Selected item was a column. The column may qualified by a table name. SPICE_EK_EXP_FUNC Selected item was a simple function invocation of the form F ( ) or else was COUNT(*) SPICE_EK_EXP_EXPR Selected item was a more general expression than those shown above. Numeric values are: { SPICE_EK_EXP_COL = 0, SPICE_EK_EXP_FUNC = 1, SPICE_EK_EXP_EXPR = 2 } Structures ========== EK API structures ----------------- Name Description ---- ---------- SpiceEKAttDsc EK column attribute descriptor. Note that this object is distinct from the EK column descriptors used internally in the EK routines; those descriptors contain pointers as well as attribute information. The members are: cclass: Column class code. dtype: Data type code: has type SpiceEKDataType. strlen: String length. Applies to SPICE_CHR type. Value is SPICE_EK_VARSIZ for variable-length strings. size: Column entry size; this is the number of array elements in a column entry. The value is SPICE_EK_VARSIZ for variable-size columns. indexd: Index flag; value is SPICETRUE if the column is indexed, SPICEFALSE otherwise. nullok: Null flag; value is SPICETRUE if the column may contain null values, SPICEFALSE otherwise. SpiceEKSegSum EK segment summary. This structure contains user interface level descriptive information. The structure contains the following members: tabnam The name of the table to which the segment belongs. nrows The number of rows in the segment. ncols The number of columns in the segment. cnames An array of names of columns in the segment. Column names may contain as many as SPICE_EK_CNAMSZ characters. The array contains room for SPICE_EK_MXCLSG column names. cdescrs An array of column attribute descriptors of type SpiceEKAttDsc. The array contains room for SPICE_EK_MXCLSG descriptors. The Ith descriptor corresponds to the column whose name is the Ith element of the array cnames. -Literature_References None. -Author_and_Institution N.J. Bachman (JPL) -Restrictions None. -Version -CSPICE Version 2.0.0 27-JUL-2002 (NJB) Defined SpiceEKDataType using SpiceDataType. Removed declaration of enum _SpiceEKDataType. -CSPICE Version 1.0.0, 05-JUL-1999 (NJB) Renamed _SpiceEKAttDsc member "class" to "cclass." The former name is a reserved word in C++. -CSPICE Version 1.0.0, 24-FEB-1999 (NJB) */ #ifndef HAVE_SPICE_EK_H #define HAVE_SPICE_EK_H /* Constants */ /* Sizes of EK objects: */ #define SPICE_EK_CNAMSZ 32 #define SPICE_EK_CSTRLN ( SPICE_EK_CNAMSZ + 1 ) #define SPICE_EK_TNAMSZ 64 #define SPICE_EK_TSTRLN ( SPICE_EK_TNAMSZ + 1 ) /* Maximum number of columns per segment: */ #define SPICE_EK_MXCLSG 100 /* Maximum length of string indicating data type: */ #define SPICE_EK_TYPLEN 4 /* Query-related limits (see header for details): */ #define SPICE_EK_MAXQRY 2000 #define SPICE_EK_MAXQSEL 50 #define SPICE_EK_MAXQTAB 10 #define SPICE_EK_MAXQCON 1000 #define SPICE_EK_MAXQJOIN 10 #define SPICE_EK_MAXQJCON 100 #define SPICE_EK_MAXQORD 10 #define SPICE_EK_MAXQTOK 500 #define SPICE_EK_MAXQNUM 100 #define SPICE_EK_MAXQCLN SPICE_EK_MAXQRY #define SPICE_EK_MAXQSTR 1024 /* Code indicating "variable size": */ #define SPICE_EK_VARSIZ (-1) /* Data type codes: */ typedef SpiceDataType SpiceEKDataType; /* SELECT clause expression type codes: */ enum _SpiceEKExprClass{ SPICE_EK_EXP_COL = 0, SPICE_EK_EXP_FUNC = 1, SPICE_EK_EXP_EXPR = 2 }; typedef enum _SpiceEKExprClass SpiceEKExprClass; /* EK column attribute descriptor: */ struct _SpiceEKAttDsc { SpiceInt cclass; SpiceEKDataType dtype; SpiceInt strlen; SpiceInt size; SpiceBoolean indexd; SpiceBoolean nullok; }; typedef struct _SpiceEKAttDsc SpiceEKAttDsc; /* EK segment summary: */ struct _SpiceEKSegSum { SpiceChar tabnam [SPICE_EK_TSTRLN]; SpiceInt nrows; SpiceInt ncols; SpiceChar cnames [SPICE_EK_MXCLSG][SPICE_EK_CSTRLN]; SpiceEKAttDsc cdescrs[SPICE_EK_MXCLSG]; }; typedef struct _SpiceEKSegSum SpiceEKSegSum; #endif