|

Satisfaction
Guaranteed
If you're not completely satisfied, tell us within
30 days and we'll refund your monthly fees paid.
|
Mini SQL
2.0 (Beta) C Programming API
Introduction
Included in the distribution is the
mSQL API library, libmsql.a. The API allows any C program to communicate
with the database engine. The API functions are accessed by including
the msql.h header file into your program and by linking against
the mSQL library (using -lmsql as an argument to your C compiler).
The library and header file will be installed by default into /usr/local/
Hughes/lib and /usr/local/Hughes/include respectively.
Like the mSQL engine, the API supports
debugging via the MSQL_DEBUG environment variable. Three debugging
modules are currently supported by the API: query, api, and malloc.
Enabling "query" debugging will cause the API to print
the contents of queries as they are sent to the server. The "api"
debug modules causes internal information, such as connection details,
to be printed. Details about the memory used by the API library
can be obtained via the "malloc" debug module. Information
such as the location and size of malloced blocks and the addresses
passed to free() will be generated. Multiple debug modules can be
enabled by setting MSQL_DEBUG to a colon separated list of module
names. For example setenv MSQL_DEBUG api:query
The API has changed slightly from the
original mSQL API. Any additions or modifications to the API are
marked with 
Query Related Functions
msqlConnect()
- int msqlConnect ( host )
- char * host ;
msqlConnect() forms an interconnection with the mSQL engine.
It takes as its only argument the name or IP address of the
host running the mSQL server. If NULL is specified as the
host argument, a connection is made to a server running on
the localhost using the UNIX domain socket /dev/msqld. If
an error occurs, a value of -1 is returned and the external
variable msqlErrMsg will contain an appropriate text message.
This variable is defined in "msql.h".
If the connection is made to
the server, an integer identifier is returned to the calling
function. This values is used as a handle for all other calls
to the mSQL API. The value returned is in fact the socket
descriptor for the connection. By calling msqlConnect() more
than once and assigning the returned values to separate variables,
connections to multiple database servers can be maintained
simultaneously.
In previous versions of mSQL,
the MSQL_HOST environment variable could be used to specify
a target machine if the host parameter was NULL. This is no
longer the case.
msqlSelectDB()
- int msqlSelectDB ( sock ,
dbName )
- int sock ;
- char * dbName ;
Prior to submitting any queries, a database must be selected.
msqlSelectDB() instructs the engine which database is to be
accessed. msqlSelectDB() is called with the socket descriptor
returned by msqlConnect() and the name of the desired database.
A return value of -1 indicates an error with msqlErrMsg set
to a text string representing the error. msqlSelectDB() may
be called multiple times during a program's execution. Each
time it is called, the server will use the specified data-
base for future accesses. By calling msqlSelectDB() multiple
times, a program can switch between different databases during
its execution.
msqlQuery()
- int msqlQuery ( sock , query
)
- int sock ;
- char * query ;
Queries are sent to the engine over the connection associated
with sock as plain text strings using msqlQuery(). As with
previous releases of mSQL, a returned value of -1 indicates
an error and msqlErrMsg will be updated to contain a valid
error message. If the query generates output from the engine,
such as a SELECT statement, the data is buffered in the API
waiting for the application to retrieve it. If the application
submits another query before it retrieves the data using msqlStoreResult(),
the buffer will be overwritten by any data generated by the
new query.

In previous versions of mSQL, the return value of msqlQuery()
was either -1 (indicating an error) or 0 (indicating success).
mSQL 2 adds to these semantics by providing more information
back to the client application via the return code. If the
return code is greater than 0, not only does it imply success,
it also indicates the number of rows "touched" by
the query (i.e. the number of rows returned by a SELECT, the
number of rows modified by an update, or the number of rows
removed by a delete).
msqlStoreResult()
- m_result * msqlStoreResult
( )
Data returned by a SELECT query must be stored before another
query is submitted or it will be removed from the internal
API buffers. Data is stored using the msqlStoreResult()
function which returns a result handle to the calling routines.
The result handle is a pointer to a m_result structure and
is passed to other API routines when access to the data
is required. Once the result handle is allocated, other
queries may be submitted. A program may have many result
handles active simultaneously.
msqlFreeResult()
- void msqlFreeResult ( result
)
- m_result * result ;
When a program no longer requires the data associated with
a particular query result, the data must be freed using msqlFreeResult().
The result handle associated with the data, as returned by
msqlStoreResult() is passed to msqlFreeResult() to identify
the data set to be freed.
msqlFetchRow()
- m_row msqlFetchRow ( result
)
- m_result * result ;
The individual database
rows returned by a select are accessed via the msqlFetchRow()
function. The data is returned in a variable of type m_row
which contains a char pointer for each field in the row. For
example, if a select statement selected 3 fields from each
row returned, the value of the 3 fields would be assigned
to elements [0], [1], and [2] of the variable returned by
msqlFetchRow(). A value of NULL is returned when the end of
the data has been reached. See the example at the end of this
sections for further details. Note, a NULL value is represented
as a NULL pointer in the row.
msqlDataSeek()
- void msqlDataSeek ( result
, pos )
- m_result * result ;
- int pos ;
The m_result structure
contains a client side "cursor" that holds information
about the next row of data to be returned to the calling program.
msqlDataSeek() can be used to move the position of the data
cursor. If it is called with a position of 0, the next call
to msqlFetchRow() will return the first row of data returned
by the server. The value of pos can be anywhere from 0 (the
first row) and the number of rows in the table. If a seek
is made past the end of the table, the next call to msqlFetchRow()
will return a NULL.
msqlNumRows()
- int msqlNumRows ( result )
- m_result * result ;
The number of rows returned
by a query can be found by calling msqlNumRows() and passing
it the result handle returned by msqlStoreResult(). The number
of rows of data sent as a result of the query is returned
as an integer value.

If a select query didn't match any data, msqlNumRows() will
indicate that the result table has 0 rows (note: earlier versions
of mSQL returned a NULL result handle if no data was found.
This has been simplified and made more intuitive by returning
a result handle with 0 rows of result data)
msqlFetchField()
- m_field * msqlFetchField (
result )
- m_result * result ;
Along with the actual data
rows, the server returns information about the data fields
selected. This information is made available to the calling
program via the msqlFetchField() function. Like msqlFetchRow(),
this function returns one element of information at a time
and returns NULL when no further information is available.
The data is returned in a m_field structure which contains
the following information:
| typedef struct { |
|
char |
* name ; |
/* name of field */ |
| |
char |
* table ; |
/* name of table */ |
| |
int |
type ; |
/* data type of field
*/ |
| |
int |
length , |
/* length in bytes
of field */ |
| |
int |
flags ; |
/* attribute flags
*/ |
} m_field;
|
Possible values for the type field
are defined in msql.h as
INT_TYPE, CHAR_TYPE and REAL_TYPE.
The individual attribute flags
can be accessed using the following
macros:
msqlFieldSeek()
- void msqlFieldSeek ( result
, pos )
- m_result * result ;
- int pos ;
The result structure includes
a "cursor" for the field data. It's
position can be moved using the
msqlFieldSeek() function. See
msqlDataSeek() for further details.
msqlNumFields()
- int msqlNumFields ( result
)
- m_result * result ;
The number of fields returned
by a query can be ascertained by calling
msqlNumFields() and passing it
the result handle. The value returned
by msqlNumFields() indicates
the number of elements in the data
vector returned by msqlFetchRow().
It is wise to check the number of fields
returned before, as with all
arrays, accessing an element that is
beyond the end of the data vector
can result in a segmentation fault.
msqlClose()
- int msqlClose ( sock )
- int sock ;
The connection to the mSQL engine
can be closed using msqlClose().
The function must be called with
the connection socket returned by
msqlConnect() when the initial
connection was made.
Schema Related Functions
msqlListDBs()
- m_result * msqlListDBs ( sock
)
- int sock ;
A list of the databases known
to the mSQL engine can be obtained via
the msqlListDBs() function. A
result handle is returned to the calling
program that can be used to access
the actual database names. The
individual names are accessed
by calling msqlFetchRow() passing it the result
handle. The m_row data structure
returned by each call will contain one
field being the name of one of
the available databases. As with all
functions that return a result
handle, the data associated with the result
must be freed when it is no longer
required using msqlFreeResult().
msqlListTables()
- m_result * msqlListTables
( sock )
- int sock ;
Once a database has been selected
using msqlInitDB(), a list of the
tables defined in that database
can be retrieved using
msqlListTables(). As with msqlListDBs(),
a result handle is
returned to the calling program
and the names of the tables are
contained in data rows where
element [0] of the row is the name of
one table in the current database.
The result handle must be freed
when it is no longer needed by
calling msqlFreeResult().
msqlListFields()
- m_result * msqlListFields
( sock , tableName ) ;
- int sock ;
- char * tableName;
Information about the fields
in a particular table can be obtained
using msqlListFields(). The function
is called with the name of a
table in the current database
as selected using msqlSelectDB()
and a result handle is returned
to the caller. Unlike msqlListDBs()
and msqlListTables(), the field
information is contained in field
structures rather than data rows.
It is accessed using msqlFetchField().
The result handle must be freed
when it is no longer needed by
calling msqlFreeResult().

msqlListIndex()
- m_result * msqlListIndex (
sock , tableName , index ) ;
- int sock ;
- char * tableName;
- char * index;
The structure of a table index
can be obtained from the server using the
msqlListIndex() function. The
result table returned contains one field.
The first row of the result contains
the symbolic name of the index
mechanism used to store the index.
Rows 2 and onwards contain the name
of the fields that comprise the
index. For example, if a compund index was
defined as an AVL Tree index
and was
based on the values of the fields
first_name and
last_name, then the result
table would look like
|
row[0]
|
| avl |
| first_name |
| last_name |
Currently the only valid index
type is 'avl' signifying a memory mapped AVL tree.
Top of Page

SERVICES
| PRICES | SPECIALS | MEMBERS | CONTACT US | HOME
Copyright © 1999
CJ Hosting. All Rights Reserved.
Terms, Conditions and Acceptable Use Policy
|
|