# CHAPTER 1: はじめに

## 1.1 概要

Empressは、1983年以来、 データベースアプリケーションの融通性を大きく向上する ユーザー定義関数(UDFs)の追加により、、 クエリ言語および4GLの範囲（機能）を拡張するための 機能を開発者に提供してきました。 ユーザー定義関数は、 計算および字句解析関数をはじめ、洗練したパターンマッチング、 統計のための計算処理、イメージおよびサウンドデータの処理などを行うために 標準 C プログラミング言語で書くことができます。 現在、パーシステント・ストアード・モジュールと呼ばれる ユーザー定義関数の上位レベルのインターフェイスは、 ANSI 標準委員会によって定義されていますが、 Empressは、この機能を標準が定義される前から提供しています。 Empressは、以下の２つのユーザー定義関数のインターフェイスをサポートします。

1. データ辞書に定義するSQL パーシステントストアードモジュール(SQL/PSM)(ダイナミックリンク)

2. カーネルレベルでキーワードテーブルに関数名を定義するEmpressライブラリ(スタテックリンク)

ユーザー定義関数の使用は、Empressの組み込み関数と同様で、 Empress SQL、Empress 4GL、Empress Report Writer Empress Hypermediaから呼び出すことができ、 また、mrの expression ルーチンによる式の構築を通して C プログラムからも使用することができます。

このマニュアルでは、ユーザー定義関数の追加による Empress機能拡張の方法と SQL/PSM と Empress ライブラリメソッドの使用手順を説明します。

このマニュアルを通して、以下の規約が使用されます。

- ユーザーが定義した関数、プロシージャ、オペレータ、集計関数を ユーザー定義関数(UDF)と呼びます。
- パーシステントストアードモジュールを PSM と呼びます。
- このマニュアル内で参照するすべてのEmpressファイルとディレクトリは、 Empress環境変数`EMPRESSPATH`によって設定されたディレクトリに 関連付けられています。

## 1.2 SQL パーシステントモジュールとしてのユーザー定義関数

パーシステントモジュールは、SQL-92 ANSI/ISO 標準への2番目の追加で、 ANSI/IEC 9075-4:1996 「Information Technology - Database Languages - SQL - Part 4: Persistent Stored Modules.」 に定義されています。 これは、強力なアプリケーション開発ツールをはじめ、 SQL3 のオブジェクト指向機能のための基盤サポートも提供します。 Empressの パーシステントストアードモジュール機能は次の実装に基づいています。

Empress パーシステントストアードモジュールは、 ユーザー定義関数およびプロシージャ、トリガーを含む、 動的なローダブルライブラリのセットです。 関数およびプロシージャ（これらはルーチンとして関係付けられます。）は、 モジュールとしてデータベースに格納され、また、 スキーマ（テーブル）のオブジェクトとして格納されます。 これらのモジュールは、データベースに格納されるように永続的で、 非永続的なメディアであるメモリーに格納されることとは反対になります。

パーシステントモジュールは、SQL文から 関数およびプロシージャを発行することができるように Ｃホスト言語で記述します。 また、 簡単にPSM オブジェクトの追加、更新、削除するための 新しいData Definition Language (DDL)文を 追加しました。

## 1.3 カーネルレベルでのEmpress ライブラリとしてのユーザー定義関数

カーネルへの直接のUDF の定義は、PSM 実装の下層においての ユーザー定義関数を作成するEmpressの方法になります。 PSM は、非常に簡単であり、UDFを作成する方法として好ましいにもかかわらず、 Empressは、カーネルレベルインターフェイスを利用できるものとし、 このインターフェイスを使用することを好むユーザーのためのドキュメント を提供します。 カーネルレベルインターフェイスが維持されることはまた、 パーシステントストアードモジュールの内部実装に興味をもつ ユーザーに役に立ちます。

開発者に次のことを許可するEmpressディストリビューションに含まれる ４つのソースファイルのテンプレートがあります。

- 関数およびプロシージャのプラグインは、C プログラミング言語でソースファイルに 書き込みます。
- これらの関数およびプロシージャをコールするために キーワードテーブルにキーワードを定義します。

ソースファイルは、 ユーザー定義関数の定義のための必要なエントリを含めるために 修正することが必要になります。 Empressが関数を認識するために修正されたソースファイルは、 コンパイルする必要があり、 これにより生成されたオブジェクトファイルは、 Empressライブラリにアーカイブされ、いくつかの実行モージュールは 再ビルドする必要があります。