Company

Products

Services

Partners

Media

 

 

 

Home

Consulting

Mobile Solutions


Tech Support

Training Courses

Course Description

Email: Support

Downloads

Empress Extreme

 

Extreme 8

 

How to Use  PSMs to Extend Capabilities of
Empress Database  with 3rd Party Libraries

  Introduction

    Empress Persistent Stored Modules (PSM) give users the ability to extend the capabilities of Database engine by writing user-defined functions, operators, stored procedures and triggers and storing them in the database.

    Furtheremore, Empress PSM technology gives users the capability to extend the intelligence of the database even more. The functionality stored in system libraries or 3rd party products which are written as C libraries can be also utilized via Empress PSM technology. This feature becomes very significant nowdays in the presence of plethora of different products available via the Internet.


How it works?

    In order to describe the process of how to extend capabilities of Empress RDBMS with 3rd party libraries we downloaded from the Internet a C library " Str" which is an extension of regular " string" C library. The " Str" library is written by Ralf S. Engelschall.

    Description of Str Library

      The Str library is a generic string library written in ANSI C which provides functions for handling, matching, parsing, searching and formatting of C strings. So it can be considered as a superset of POSIX string(3), but its main intention is to provide a more convenient and compact API plus a more generalized functionality.

    For the sake of our example we used str_compare function. The synopsis of this function is:

      int str_compare(const char *s, const char *t, str_size_t n, int mode)

        This performs a lexicographical comparison of the two strings s and t (but never compares more than n characters of them) and returns one of three return values: a value lower than 0 if s is lexicographically lower than t, a value of exactly 0 if s and t are equal and a value greater than 0 if s is lexicographically higher than t. Per default (mode is 0) the comparison is case-sensitive, but if STR_NOCASE is used for mode the comparison is done in a case-insensitive way.

    Empress user has to know the synopsis of the functions included in the library in order to correctly define them in Empress module.

    For example:

     
     

      CREATE MODULE module_str FUNCTION str_compare( GENERIC CHAR, GENERIC CHAR, GENERIC INTEGER, GENERIC INTEGER) RETURNS GENERIC INTEGER EXTERNAL NAME str_compare END MODULE UPDATE MODULE module_str USING './str-0.9.4/to/str/lib/libstr.so.9.0.24'

    We use " USING" keyword in " UPDATE MODULE" command in order to specify the external 3rd party library. In this way Empress RDBMS will not store the library inside the database, but only use its functionality.

    The example shows an SQL JOIN operation on the two following tables, " vendors" and " hardware" with the help of " str_compare" function.

    Table: vendors

      id

    name

    1

    SUN

    2

    IBM

    3

    SGI

     

    Table : hardware

    id

    name

    1

    Sun Sparcserver 670MP

    2

    sunNetra Internet Server

    3

    SUN 3/50

    4

    SG Irix Onyx

     
     

      SELECT 'v'.id, 'v'.name, 'h'.id, 'h'.name FROM vendors 'v', hardware 'h' WHERE str_compare('v'.name, 'h'.name, 3, 4) = 0 id name id name 1 SUN 1 Sun Sparcserver 670MP 1 SUN 2 sunNetra Internet Server 1 SUN 3 SUN 3/50

    where the 3rd parameter (value = 3) is the number of characters to compare and the 4th parameter (value = STR_NOCASE = 4) designates a " case insensitive" operation.

    Note: The library " Str" is used here to verify the proof of concept. Some other functions in the library might not be applicable for Empress usage.

 

APPENDIX

    The following script can be executed with EMPRESS V8.60 installed on Intel x86 machine running Linux OS Release 2.0 with libc.so.6 (ELF) in order to acquire the above described functionality. The script would require changes in order to be executed on some other platforms, such as MS Windows.

#!/bin/sh

empmkdb exampleDB

empbatch exampleDB < < EOM
CREATE MODULE module_str
 FUNCTION str_compare( GENERIC CHAR, GENERIC CHAR,
 GENERIC INTEGER, GENERIC INTEGER)
 RETURNS GENERIC INTEGER
 EXTERNAL NAME str_compare END MODULE

UPDATE MODULE module_str
USING './str-0.9.4/to/str/lib/libstr.so.9.0.24' CREATE TABLE vendors (id longinteger, name char(3)) INSERT INTO TABLE vendors VALUES (1, " SUN" ) INSERT INTO TABLE vendors VALUES (2, " IBM" ) INSERT INTO TABLE vendors VALUES (3, " SGI" ) CREATE TABLE hardware (id longinteger, name char) INSERT INTO TABLE hardware VALUES (1, " Sun Sparcserver 670MP" ) INSERT INTO TABLE hardware VALUES (2, " sunNetra Internet Server" ) INSERT INTO TABLE hardware VALUES (3, " SUN 3/50" ) INSERT INTO TABLE hardware VALUES (4, " SG Irix Onyx" ) SELECT 'v'.id, 'v'.name, 'h'.id, 'h'.name
FROM vendors 'v', hardware 'h' WHERE str_compare('v'.name, 'h'.name, 3, 4) = 0 EOM

 

                       
                             
                         

Company
Information
GSA Contracts
Careers
Privacy Policy 
Contact US

Products
Empress RDBMS
Empress Servers
Empress API
Free Trial
 
Empress iPad Apps
 

Services
Consulting
Mobile Apps Development
Technical Support

Training Courses
Empress Extreme  

Partners
Distributors
Business Alliances
Partner Programs  
GSA Program
Distributors Program

Media 
Empress Markets
News and Events
Press releases
Technical News
Success Stories

        USA: 301-220-1919                 Canada & International:       905-513-8888         
Copyright 2014           Empress Software Inc.           info@empress.com           Join Empress Mailing List