複合イベント処理言語でデータベースのデータを扱う場合、SQLのデータタイプのままでは複合イベント処理を記述できません。
JDBCドライバにより、SQLのデータタイプは一旦総称SQL型(java.sql.Types)に変換され、さらに複合イベント処理言語のデータタイプに変換されます。総称SQL型に対応する複合イベント処理言語のデータタイプは次のようになります。
SQLの各データタイプに対応する総称SQL型は、利用するJDBCドライバのマニュアルを参照してください。複合イベント処理言語のデータタイプについては、「1.1.6 データタイプ」を参照してください。
java.sql.Typesで定義されている総称SQL型 | 複合イベント処理言語のデータタイプ |
---|---|
CHAR VARCHAR LONGVARCHAR | string |
BOOLEAN BIT | bool/boolean |
SMALLINT | short |
INTEGER | int/integer |
BIGINT | long |
REAL | float |
DOUBLE FLOAT | double |
上記の対応表にない総称SQL型の中には、型変換を行うことで利用できる総称SQL型もあります。
java.sql.Typesで定義されている総称SQL型 | 型変換方法 | 複合イベント処理言語のデータタイプ |
---|---|---|
NUMERIC DECIMAL | bool、short、byte、int、long、float、doubleのいずれかによるキャストを行ってください。 データサイズが変換先のデータタイプよりも大きい場合、データ損失の可能性があります。 | キャストで指定した型 |
DATE TIME TIMESTAMP | toString()メソッドを付加してください。 | string |
その他、記述のないSQL型は、複合イベント処理言語では利用できません。
例
Symfoware Server(Nativeインタフェース)のデータタイプと複合イベント処理言語のデータタイプの間のマッピング例
Symfoware Server(Nativeインタフェース)のSQLのデータタイプと複合イベント処理言語のデータタイプの間は、次のように変換されます。
Symfoware Server(Nativeインタフェース)のSQLのデータタイプと総称SQL型の間の変換については、Symfoware Server(Nativeインタフェース)のマニュアルを参照してください。
分類 | Symfoware ServerのSQLのデータタイプ | 複合イベント処理言語のデータタイプ |
---|---|---|
真数型 | SMALLINT | short |
INTEGER | int/integer | |
NUMERIC | bool、short、byte、int、long、float、doubleのいずれかによるキャストを行ってください。 | |
概数型 | REAL | float |
FLOAT(p) p=1~23 | float | |
FLOAT(p) p=24~52 | double | |
DOUBLE PRECISION | double | |
日時型 | DATE | toString()メソッドを付加してください。 |
TIME | ||
TIMESTAMP | ||
文字列型 | CHARACTER | string |
VARCHAR | string | |
各国語文字列型 | NCHAR | string |
NCHAR VARYING | string | |
その他 | BLOB | 未サポート |
ROW_ID | ||
INTERVAL YEAR TO MONTH | ||
INTERVAL YEAR | ||
INTERVAL MONTH | ||
INTERVAL DAY TO HOUR | ||
INTERVAL DAY TO MINUTE | ||
INTERVAL DAY TO SECOND | ||
INTERVAL DAY | ||
INTERVAL HOUR TO SECOND | ||
INTERVAL HOUR | ||
INTERVAL MINUTE TO SECOND | ||
INTERVAL MINUTE | ||
INTERVAL SECOND |
記述例
string型の「id」とstring型の「e_date」をプロパティとして持つ入力イベント「E1」が入力され、データベース「MY_DB」中の「M_DATE」の日付が「e_date」よりも新しい場合に、「M_DATE」を出力する複合イベント処理は、以下のようになります。
@Name('EPL1') select E1.id, db1.M_DATE.toString() from E1, sql:my_db ['SELECT M_DATE FROM MY_TBL'] as db1 where db1.M_DATE.toString()>E1.e_date;
string型の「id」とint型の「value」をプロパティとして持つ入力イベント「E2」が入力され、データベース「MY_DB」中の「PRICE」の値が「value」よりも大きい場合に、「PRICE」を出力する複合イベント処理は、以下のようになります。
@Name('EPL2') select E2.id, cast(db2.PRICE, double) from E2, sql:mydb_db ['SELECT PRICE FROM MY_TBL'] as db2 where cast(db2.PRICE, double)>E2.value;