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;