celestia/macosx/SpiceEK.h

449 lines
16 KiB
C

/*
-Header_File SpiceEK.h ( CSPICE EK-specific definitions )
-Abstract
Perform CSPICE EK-specific definitions, including macros and user-
defined types.
-Disclaimer
THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE
CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S.
GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE
ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE
PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS"
TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY
WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A
PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC
SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE
SOFTWARE AND RELATED MATERIALS, HOWEVER USED.
IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA
BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT
LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND,
INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS,
REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE
REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY.
RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF
THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY
CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE
ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE.
-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 ( <column> )
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