華式::縁の下::基本構造
これはなに?
基本構造です。制限事項
- 速度は当分考えない。
- DBのインスタンスはひとつだけ
- サーバー間連携?なにそれ
- Indexは持ちません。
- 統計情報なども集計、解析は行いません。
作動イメージ
初期作動時
■初期起動↓
■設定ファイルがないことを確認
↓
■コンフィグファイルを読み込み
↓□読み込む情報
↓ 1)システムフォルダの位置
↓ 2)所有者情報
↓ 3)ロックファイルの生存時間。
↓
■DBの状態を正常状態にキープ
↓1)前回のアクセス履歴を元にロックファイルの除去などを行う。
↓
■ユーザ情報取得
↓ 1)ユーザ情報はシステムテーブルより取得
↓ 2)ユーザ認証、アクセス許可の有無を確認。
↓
■対象のSQL解析
↓ 1)シンタックス解析
↓ 2)クエリーの正規化(不正な書き方の統一)
↓ 3)クエリーの種類を確認、権限チェック
↓
■DB上のオブジェクトの確認
↓ 1)オブジェクトの有無を確認→システムテーブルで確認
↓ システムテーブルにオブジェクトの位置と構成ファイルがある。
↓ 2)オブジェクトはTableと編成情報のみ。
↓ テーブルはディレクトリと構成情報とデータファイルで構成。
↓
■ロックの開始
↓ 1)ロックの有無確認。
↓ 2)ロックファイルの設置
■SQLの実行
↓ 1)Selectを実行
↓ 2)それからWhere句を実行
↓ 3)Group by句を実行
↓ 4)Order by句を実行
↓
■内容を結果セット(ハッシュ)に入れる。
↓
■結果セットを戻り値として返す。
何も指定のない場合はここからCUI用の出力文字列を作成する。
エンコード
何かというと、適当な状態にSQL文入力を整形して処理を行うこと。■コメントの除去
↓ 1)--
↓ 2)/*/*コメント*/*/ といった形式にも対応
↓
■改行、タブの半角スペースへの置換
↓
■特定キーワードを置換
↓ 1)クウォート置換のプレフィックス文字を別の文字列に置換
↓
■シングルクウォート、ダブルクウォートの中身の取り出し
↓ 1)ダブルクウォートの内容を別配列に格納
↓ 2)配列格納箇所を表すポインタ文字列に置換
↓ 3)シングルクウォートの内容を別配列に格納
↓ 4)配列格納箇所を表すポインタ文字列に置換
↓
■SQL文をSQLキーワードで分割
↓
■各行のキーワードを精査して実行単位を確定
↓
■確定した実行単位からさらに分割
↓
■標準書式に適合するSQL文に再編成
↓
■各実行ユニット実行。(どのような実行ユニットを実装するかは未定。)
SQL実行ユニット
以下のSQL実行ユニットを実装したい。■Select
以下の実施を行う。いずれも階層制限のない実装を行う。---------------
1)単純Select
Select 〜 From 〜 Where 〜 Group by 〜 having 〜 Order by 〜
2)内部結合 Inner join
Select 〜 From 〜 Inner join 〜 On 〜
3)外部結合 Left outer join (Left join)
Select 〜 From 〜 Left outer Join 〜 On 〜
4)サブクエリー
Select 〜 From (Select 〜 From 〜 Where 〜)
■Update
以下の実施を行う。---------------
1)単純Update
Update 〜 set 〜 Where
2)Update Select Inner Join
Update 〜 set 〜 From 〜 Inner join 〜 on 〜 Where 〜
■Delete
以下の実施を行う。----------------------------------------------------------------------
1)単純Delete
Delete From 〜 Where 〜
2)Delete From Inner Join On
Delete From 〜 Inner join 〜 On 〜 Where 〜
■Insert
以下の実施を行う。----------------------------------------------------------------------
1)単純 Insert
Insert 〜 into 〜 values(〜)
2)Insert into Select
Insert 〜 into 〜 Select 〜 From 〜
■Truncate
以下の実施を行う。----------------------------------------------------------------------
1)単純Truncate Table
Truncate Table 〜
■Create Table
以下の実施を行う。----------------------------------------------------------------------
1)単純Create Table
Create Table 〜
■Drop Table
以下の実施を行う。----------------------------------------------------------------------
1)単純Drop Table
Drop Table 〜
実装予定外
- View
- Synonim
情報
ファイルの持ち方
以下のようなファイルの持ち方をします。■テーブル単位で1ディレクトリ、1管理ファイルを保持
■基本はCSV
■プライマリキー単位でファイルを保持
1)メリット
Inner joinやキーでのGroup byの処理が早くなる。
2)デメリット
キー以外のキーワードをJoinしたりGroup化すると処理が劇的に
遅くなる可能性が高い。
特殊オブジェクト
戻り値
想定しているのは主に文字列のみ。DBの出力もそれによりおこなう。
呼び出し引数があった場合はオブジェクトで返す。
システムテーブルの仕様
以下テーブルレイアウトNo | カラム名 | サイズ | 内容 |
1 | ObjectID | 64 | オブジェクト名 |
2 | ObjectType | 1 | オブジェクトのID |
3 | OwnerID | 64 | 所有者名 |
4 | validFlag | 1 | 有効フラッグ |
ユーザテーブル
以下テーブルレイアウトNo | カラム名 | サイズ | 内容 |
1 | UserID | 64 | ユーザ名 |
2 | UserType | 1 | ユーザのID |
3 | UserRight | 8 | 権限表 |
4 | validFlag | 1 | 有効フラッグ |
テーブルオブジェクト
基本的な構造。結果セットにのみしよう。
もしくはインデックスにのみ使用とか。
■テーブルレイアウトを持つハッシュ
■データ自体は二次元配列
2006年11月04日(土) 02:48:20 Modified by ryunosinfx