このウィキの読者になる
更新情報がメールで届きます。
このウィキの読者になる
カテゴリー
タグ
最近更新したページ
最新コメント
メニューバーA
フリーエリア
Wiki内検索

華式::縁の下::基本構造

これはなに?

基本構造です。

制限事項

  1. 速度は当分考えない。
  2. DBのインスタンスはひとつだけ
  3. サーバー間連携?なにそれ
  4. Indexは持ちません。
  5. 統計情報なども集計、解析は行いません。

作動イメージ


初期作動時

■初期起動

■設定ファイルがないことを確認

 
■コンフィグファイルを読み込み
↓□読み込む情報
↓ 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 〜


実装予定外

  1. View
  2. Synonim
 -----------------------------------------------------------------------

情報

ファイルの持ち方

以下のようなファイルの持ち方をします。
■テーブル単位で1ディレクトリ、1管理ファイルを保持
■基本はCSV
■プライマリキー単位でファイルを保持
1)メリット
      Inner joinやキーでのGroup byの処理が早くなる。
2)デメリット
      キー以外のキーワードをJoinしたりGroup化すると処理が劇的に
      遅くなる可能性が高い。

特殊オブジェクト



戻り値

想定しているのは主に文字列のみ。
DBの出力もそれによりおこなう。
呼び出し引数があった場合はオブジェクトで返す。

システムテーブルの仕様

以下テーブルレイアウト
Noカラム名サイズ内容
1ObjectID64オブジェクト名
2ObjectType1オブジェクトのID
3OwnerID64所有者名
4validFlag1有効フラッグ

ユーザテーブル

以下テーブルレイアウト
Noカラム名サイズ内容
1UserID64ユーザ名
2UserType1ユーザのID
3UserRight8権限表
4validFlag1有効フラッグ

テーブルオブジェクト

基本的な構造。
結果セットにのみしよう。
もしくはインデックスにのみ使用とか。
■テーブルレイアウトを持つハッシュ
■データ自体は二次元配列
2006年11月04日(土) 02:48:20 Modified by ryunosinfx




スマートフォン版で見る