SSQL 教育
190218
1
SuperSQL とは
• データベース検索、構造化、メディア変換を統合するシステム
出力を
• データ
• 構造
• メディア抽象
の3要素に直交分解し、SuperSQLによって3要素を合成
SQL × 構造化 × メディア抽象
2
SuperSQL とは
• SQLの拡張言語
• 関係DBの出力結果を構造化
• 短いコードで多彩なレイアウト表現を実現
RDB
SQL Java LDAP
Super SQL
E~cel XML
HTML
3
もちろん、知ってるかとは思いますが。。。
• 多彩なレイアウト実現方法
• 結合子( , ! % )
‘SSQL’ , ‘WIX’ ! ‘RMX’
• 反復子( [], []!) [teams],
[teams]!
• 装飾子( @{} )
‘SSQL’@{bgcolor=‘red’}
SSQL WIX RMX
SSQL WIX RMX CS RT A
SSQL
4
SuperSQL とは
• SQLの場合
• フラットな表しか得られない!
SQLクエリ
SELECT d.name, e.name, e.salary
FROM dept d, employee e WHERE d.manager = e.manager;
5
SuperSQL とは
• SuperSQLの場合
•
•
•
•
多彩なレイアウトを実現!
結合子 反復子 装飾子
SuperSQLクエリ
GENERATE HTML
[ s.city@{align=“center”,
bgcolor=“navy”, color=“white”}!
[d.floor, [d.name, [i.name]! ]! ]!
],@{bgcolor=“cyan”, color=“blue”}
FROM shop s,dept d, item i
WHERE i.dept=d.id AND d.shop=s.id 6
システム概要
SuperSQLQuery
Parser QuerySQL
Data Constructor
CodeGenerator
RDB Flat DBMS
Table Tree
Structured Data Layout Expression
HTML XML PDF EXCEL …
DatabaseInterface
7
内部処理
• 構文解析部(parser)
• ANTLR4(コンパイラコンパイラ、パーサージェネレータ)を用いて実装
• クエリをSuperSQLの文法にしたがって解析しSQLクエリとレイア ウ ト情報に分ける
• SuperSQLを大きく根本を変えるならここから
• ex. 結合子を増やしたい!
• ex2. 反復方向を増やしたい!
• 後で少しいじってもらいま す
SuperSQLQuery
Parser QuerySQL
Data Constructor
Code Generator
RDB DBM S Flat
Table Tree
Structured Data Layout Expression
HTML XML PDF EXCEL …
DatabaseInterface
8
内部処理
• Data Constructor
• 構造情報と検索結果を組み合わせる
• レイアウトに合わせてデータをリスト 化
SuperSQLQuery
Parser QuerySQL
Data Constructor
Code Generator
RDB Flat DBMS
Table Tree
Structured Data Layout Expression
HTML XML PDF EXCEL …
DatabaseInterface
9
内部処理
• コード生成部(code generator)
• レイアウト構造に合わせてメディアコードを生 成
• 装飾子情報などはここで判別
• 関数の機能実装は基本ここ
• メディアごとに生成部は別実装
SuperSQLQuery
Parser QuerySQL
Data Constructor
CodeGenerator
RDB Flat DBMS
Table Tree
Structured Data Layout Expression
HTML XML PDF EXCEL …
DatabaseInterface
10
演習準備
11
準備 ~ 必要なファイルの DL~
• Homebrewでgitをインストール
• eclipseのworkspace ( [$dir]/workspace ) に移動
• Githubからコードを取得
$ brew install git
$ cd [$dir]/workspace
$ git clone https://github.com/ssqltatsu/SSQLeduc2019.git
12
準備 ~ssql の設定 ~
• eclipse: ファイル→インポート→既存の
Mavenプロジェクト を選択
• SSQLeduc2019を参照
13
Maven とは
…
• Java用のプロジェクト管理ツール
• pom.xmlに色々書くことでビルドの際に色
々してくれる
• ライブラリのインポート
• ビルドの際にjarを作るなどの設定 などなど…
14
準備 ~Antlr4 の導入 ~
• .bash_profileにエイリアスの登録
• alias antlr4='java -Xmx500M -cp "/usr/local/lib/antlr-4.5-complete.jar:
$CLASSPATH" org.antlr.v4.Tool’
を記述
• ANTLRファイルのコンパイル
• cd ssqleduc/src/main/java/supersql/parser
• antlr4 [ファイル名].g4
• eclipse→ssqleducを右クリック→リフレッシュ
$ brew install antlr4
$ source ~/.bash_profile
15
準備 ~ データベース作成 ~
• コマンドラインからpostgresqlにアクセス
• データベースの作成
•作成したデータベース内で以下のコマンドを実行
$ psql postgres
postgres=#create database [ssqleduc2019(任意)]
postgres=#\q
$ psql [ssqleduc2019]
ssqleduc2019=#\i [$dir]/
workspace/ssqleduc2019/ssqleduc2019_database.sql
16
準備
• ホームディレクトリにconfig.ssqlを作成
• vi ~/config.ssql
—————————————————————————————————————————
driver=postgresql
db=[作成したデータベース名]
outdir=[$dir]/workspace/ssqleduc2019/output
—————————————————————————————————————————
17
Eclipse: 実行
• 実行方法
• 実行→実行構成
• メインプロジェクト:ssqleduc2019 メイン・クラス:supersql.FrontEnd
• 引数→プログラムの引数
-f [$dir]/workspace/ssqleduc2019/input/1.ssql
→実行
• ssqlファイルが読み込まれて、HTMLファイルが生成されてたら OK!
18
SuperSQL: 補足
• 実行時オプション
• 起動条件等。引数で指定
オプション 役割
-f SuperSQLクエリファイル の読み込み
-d 出力ディレクトリの指定 -o 出力ファイル名の指定 -debug Log.outを出力(デバッグ用)
-ehtml 埋め込み型実行用
19
Eclipse: 補足
• 便利なショートカット
• 複数ファイルの同時検索
• 検索→ファイル
• 含まれるテキスト:検索ワード ファイル名のパターン:*.java
機能 ショートカットキー
前回の構成で実行 [command]+[shift]+[F11]
コメントアウト [command]+/
文字列検索 [command]+f 宣言を開く [command]+k
20
( ちょっと早いですが ) お昼休み !!!
21
演習
22
演習 ①
GENERATE HTML
[link(d.name, ‘emp.ssql’, d.id)]!
FROM dept d
FOREACH d.id GENERATE HTML
[m.name, [e.name, e.salary],]!
FROM dept d, employee e, employee m
WHERE d.manager = m.id AND e.manager = m.id
query.g4
• Parser
• query.g4とprefix.g4で文法を決めている prefix.g4
23
演習 ①
•
•
•
•
文法ルール(parse rules)と語彙(lexer rules)を定義して いる
ルール名 : ルール内容 の形になってい る ルール名…小英文字で定義
lexer rule…大英文字で定義
表現 内容
? 0 or 1 回
+ 1回以上
* 0回以上
| OR 24
演習 ①
• やること
• 現在の複合反復子のパターン
• 複合反復子のパターンを増やそう!
• 6パターンしかない複合反復子を12パターンに増やす とりあえず、1~12.ssqlのパーズが通ればOK
[ TFE ],2! [ TFE ],2!3% [ TFE ],2%
[ TFE ]!2, [ TFE ]!2,3% [ TFE ]!2%
25
ヒント
• 定義方法(再掲)
• ルール名:小英文字で定義
• lexer rule:大英文字で定義
• ( tatsu )? →tatsuというruleが0または1回
• ( tatsu )* →tatsuというruleが0回以上
• ( tatsu )+ →tatsuというruleが1回以上
• TFEの記述ルールを定義→ supersql/parser/query.g4
• 複合反復子を定義しているところは?→composite_iteratorルール
[TFE],2! [ TFE ],2!3% [ TFE ],2%
[ TFE ]!2, [ TFE ]!2,3% [ TFE ]!2%
[ TFE ],2%3!
[ TFE ]!2%3, [ TFE ]%2, [ TFE ]%2,3! [ TFE ]%2! [ TFE ]%2!3,
26
• composite_iteratorルールを編集
こんな感じにできてればOK
答え
27
ちなみに
• 定義したparserは基本はクエリに何が書か れ ているか判断するだけ
•
•
SuperSQLが必要なLayout Expressionは作ってくれない その後の処理はもちろんやってくれない
• 新しい定義に対して機能を付けるには?
28
システム概要
SuperSQLQuery
Parser QuerySQL
Data Constructor
CodeGenerator
RDB Flat DBMS
Table Tree
Structured Data Layout Expression
HTML XML …
DatabaseInterface
定義したルールが正しくLayout Expressionに入るように処理
出力したいHTMLタグ (HTMLなら)を生成
PDF EXCEL
29
演習② ~ 関数の作成 ~
• HTML, Mobile_HTML5, Unity,XML…
• 出力形式を増やす場合は、
supersql.codegenerator.◯◯◯
のようなコード生成のクラス群を作る
• supersql.codegenerator.Mobile_HTML5
• Mobile_HTML5Attribute:HTMLタグの属性を書いたりする
• Mobile_HTML5C1, C2,…,G1,…:レイアウト式毎の各処理
• Mobile_HTML5Env:出力機構の環境。装飾子を作れる。
• Mobile_HTML5Function:関数を作れる。image, link関数など
• Mobile_HTML5Manager:ファイルを生成して文字列を出力 30
演習② ~ 関数の作成 ~
• 新しい関数を作ろう
• GENERATE HTML_bootstrapを使用
• 簡単にbootstrapの機能を実現
• http://getbootstrap.com/javascript/
31
演習② ~ 関数の作成 ~
GENERATE HTML_bootstrap
[image_pop(e.name, e.image, ’./image’, ’left’)]!
• 新しい関数を作ろう
• マウスオーバーしたら画像がポップアッ プする関数
マウスオーバー時に ポップアップする画像
FROM employee e;
画像がポップ アップする 方向を指定 画像のpath
を指定
32
ヒント
• すべきこと
• Code Generatorのどこかに関数の追加
• /output/jscss/supersql.jsでjs側の挙 動を指定 マニュアルを読んで参考にしてみよう!
https://bootstrapdocs.com/v3.3.6/docs/javascript/#t ooltips
33
ヒント
• 関数をなにか追加したい →Mobile_HTML5Function.java
• 関数名の判別が必要
image
• SuperSQLには、 関数などが多数の関数が存在
• 関数の引数の取得+HTMLに必要なタグを記述している
→他のわかりやすい関数を参考にしてみよう
34
• Mobile_HTML5Fuction.java
• workメソッド内
• Func_image_pop関数の実装
答え
35
答え
• supersql.js
36