SESAM database functions
SESAM
&reftitle.intro;
SESAM/SQL-Server is a mainframe database system, developed by
Fujitsu Siemens Computers, Germany. It runs on high-end mainframe
servers using the operating system BS2000/OSD.
In numerous productive BS2000 installations, SESAM/SQL-Server has
proven
the ease of use of Java-, Web- and client/server connectivity,
the capability to work with an availability of more than
99.99%,
the ability to manage tens and even hundreds of thousands of
users.
There is a PHP3 SESAM interface available which allows
database operations via PHP-scripts.
Access to SESAM is only available with the latest CVS-Version of
PHP3. PHP 4 does not support the
SESAM database.
&reference.sesam.ini;
Cursor Types
The result cursors which are allocated for SQL "select type"
queries can be either "sequential" or "scrollable". Because of
the larger memory overhead needed by "scrollable" cursors, the
default is "sequential".
When using "scrollable" cursors, the cursor can be freely
positioned on the result set. For each "scrollable" query, there
are global default values for the scrolling type (initialized to:
SESAM_SEEK_NEXT) and the scrolling offset
which can either be set once by
sesam_seek_row or each time when fetching a
row using sesam_fetch_row. When fetching a
row using a "scrollable" cursor, the following post-processing is
done for the global default values for the scrolling type and
scrolling offset:
Scrolled Cursor Post-Processing
Scroll Type
Action
SESAM_SEEK_NEXT
none
SESAM_SEEK_PRIOR
none
SESAM_SEEK_FIRST
set scroll type to SESAM_SEEK_NEXT
SESAM_SEEK_LAST
set scroll type to SESAM_SEEK_PRIOR
SESAM_SEEK_ABSOLUTE
Auto-Increment internal offset value
SESAM_SEEK_RELATIVE
none. (maintain global default
offset value, which allows for, e.g., fetching
each 10th row backwards)
Porting note
Because in the PHP world it is natural to start indexes at zero
(rather than 1), some adaptions have been made to the SESAM
interface: whenever an indexed array is starting with index 1 in
the native SESAM interface, the PHP interface uses index 0 as a
starting point. E.g., when retrieving columns with
sesam_fetch_row, the first column has the
index 0, and the subsequent columns have indexes up to (but not
including) the column count ($array["count"]). When porting
SESAM applications from other high level languages to PHP, be
aware of this changed interface. Where appropriate, the
description of the respective php sesam functions include a note
that the index is zero based.
Security concerns
When allowing access to the SESAM databases, the web server user
should only have as little privileges as possible. For most
databases, only read access privilege should be granted.
Depending on your usage scenario, add more access rights as you
see fit. Never allow full control to any database for any user
from the 'net! Restrict access to php scripts which must
administer the database by using password control and/or SSL
security.
Migration from other SQL databases
No two SQL dialects are ever 100% compatible. When porting
SQL applications from other database interfaces to SESAM,
some adaption may be required. The following typical
differences should be noted:
Vendor specific data types
Some vendor specific data types may have to be replaced by
standard SQL data types (e.g., TEXT could
be replaced by VARCHAR(max. size)).
Keywords as SQL identifiers
In SESAM (as in standard SQL), such identifiers must be
enclosed in double quotes (or renamed).
Display length in data types
SESAM data types have a precision, not a display
length. Instead of int(4) (intended use:
integers up to '9999'), SESAM requires simply
int for an implied size of 31 bits. Also,
the only datetime data types available in SESAM are:
DATE, TIME(3) and
TIMESTAMP(3).
SQL types with vendor-specific unsigned,
zerofill, or
auto_increment attributes
Unsigned and zerofill
are not supported. Auto_increment is
automatic (use "INSERT ... VALUES(*, ...)"
instead of "... VALUES(0, ...)" to take
advantage of SESAM-implied auto-increment.
int ... DEFAULT '0000'
Numeric variables must not be initialized with string
constants. Use DEFAULT 0 instead. To
initialize variables of the datetime SQL data types, the
initialization string must be prefixed with the respective
type keyword, as in: CREATE TABLE exmpl ( xtime
timestamp(3) DEFAULT TIMESTAMP '1970-01-01 00:00:00.000' NOT
&null; );
$count = xxxx_num_rows();
Some databases promise to guess/estimate the number of the
rows in a query result, even though the returned value is
grossly incorrect. SESAM does not know the number of rows in
a query result before actually fetching them. If you REALLY
need the count, try SELECT COUNT(...) WHERE
..., it will tell you the number of hits. A second
query will (hopefully) return the results.
DROP TABLE thename;
In SESAM, in the DROP TABLE command, the
table name must be either followed by the keyword
RESTRICT or
CASCADE. When specifying
RESTRICT, an error is returned if there are
dependent objects (e.g., VIEWs), while with
CASCADE, dependent objects will be deleted
along with the specified table.
Notes on the use of various SQL types
SESAM does not currently support the BLOB type. A future version
of SESAM will have support for BLOB.
At the PHP interface, the following type conversions are
automatically applied when retrieving SQL fields:
SQL to PHP Type Conversions
SQL Type
PHP Type
SMALLINT, INTEGER
integer
NUMERIC, DECIMAL, FLOAT, REAL, DOUBLE
float
DATE, TIME, TIMESTAMP
string
VARCHAR, CHARACTER
string
When retrieving a complete row, the result is returned as an
array. Empty fields are not filled in, so you will have to check
for the existence of the individual fields yourself (use
isset or empty to test
for empty fields). That allows more user control over the
appearance of empty fields (than in the case of an empty string
as the representation of an empty field).
Support of SESAM's "multiple fields" feature
The special "multiple fields" feature of SESAM allows a column to
consist of an array of fields. Such a "multiple field" column can
be created like this:
Creating a "multiple field" column
and can be filled in using:
Filling a "multiple field" column
)
]]>
Note that (like in this case) leading empty sub-fields are
ignored, and the filled-in values are collapsed, so that in the
above example the result will appear as multi(1..2) instead of
multi(2..3).
When retrieving a result row, "multiple columns" are accessed
like "inlined" additional columns. In the example above, "pkey"
will have the index 0, and the three "multi(1..3)" columns will
be accessible as indices 1 through 3.
&reftitle.seealso;
For specific SESAM details, please refer to the SESAM/SQL-Server documentation
(english) or the
SESAM/SQL-Server documentation (german), both available
online, or use the respective manuals.
&reference.sesam.functions;