/* SQL分析用フォーマット */

typedef struct ST_SQL {

    int KNo;                 /* 階層No                                 */

    int KNoSub;              /* 階層サブNo                             */

    int LKNo[64];            /* リンク元階層No(最上位の場合、0)        */

    int LKNoSub[64];         /* リンク元階層サブNo(最上位の場合、0)    */

    char JoinMthd[64];       /* 結合方法(join、サブクエリ)             */

    char *JoinKey            /* 結合キー                               */

    char Crud[16+1];         /* "Insert", "Select", "Update", "Delete" */

    int DistinctFlg;         /* Distinct:有⇒1, 無⇒0                 */

    char *ColumnsStr;        /* 抽出カラム文字列                       */

    char *ColumnsOStr[1024]; /* 抽出カラムOriginal(項目別)             */

    char *ColumnsEStr[1024]; /* 抽出カラムEnglish(項目別)              */

    char *ColumnsAStr[1024]; /* 抽出カラム別名(項目別)                 */

    char FromOStr[128+1];    /* 抽出元Original                         */

    char FromEStr[64+1];     /* 抽出元English                          */

    char FromAStr[128+1]     /* 抽出元別名                             */

    char *WhereStr;          /* Where句の中身                          */

    char *GroupByStr;        /* グループ化項目                         */

    char *HavingStr;         /* グループ化前処理条件                   */

    char *OrderByStr;        /* ソート項目                             */

}

 

実は、このデータモデルだけでは色々無理な点がある。

それは「このモデルの各項目にどうやってデータを格納するのか」と言う手段。

 

ここをロジックに頼ろうと考えているのが私の思想。

例えば。

char *ColumnsOStr[1024];は1024もカラムを用意しても、どの様にカラム群を正確に分割して格納するのだろうか。

今後はこういう細かい点を「実装しながら」、データモデルの欠点を探っていく流れになる。

 

■事前に変えておく

一応気になっているところは「このデータモデルでは、たった1つのSQLしか表現できない」と言う事だ。

設計書は複数作る必要がある。

従って、このデータモデルを複数持つ構造体を用意できるに越したことはない。

 

つまり、こういう事だ。

/* SQL分析用フォーマット */

typedef struct ST_SQL {

    int KNo;                 /* 階層No                                 */

    int KNoSub;              /* 階層サブNo                             */

    int LKNo[64];            /* リンク元階層No(最上位の場合、0)        */

    int LKNoSub[64];         /* リンク元階層サブNo(最上位の場合、0)    */

    char JoinMthd[64];       /* 結合方法(join、サブクエリ)             */

    char *JoinKey            /* 結合キー                               */

    char Crud[16+1];         /* "Insert", "Select", "Update", "Delete" */

    int DistinctFlg;         /* Distinct:有⇒1, 無⇒0                 */

    char *ColumnsStr;        /* 抽出カラム文字列                       */

    char *ColumnsOStr[1024]; /* 抽出カラムOriginal(項目別)             */

    char *ColumnsEStr[1024]; /* 抽出カラムEnglish(項目別)              */

    char *ColumnsAStr[1024]; /* 抽出カラム別名(項目別)                 */

    char FromOStr[128+1];    /* 抽出元Original                         */

    char FromEStr[64+1];     /* 抽出元English                          */

    char FromAStr[128+1]     /* 抽出元別名                             */

    char *WhereStr;          /* Where句の中身                          */

    char *GroupByStr;        /* グループ化項目                         */

    char *HavingStr;         /* グループ化前処理条件                   */

    char *OrderByStr;        /* ソート項目                             */

}

typedef struct ST_SQLS {

    char *SqlFileName;

    int FileCnt;

    ST_SQL *st_sql

}

 

さあ、ここからがトライ&エラーの始まりだ。

一旦は考えてみた。

何もないより100歩も1000歩も良い。