さあ。ドンドン書いていきましょう.
■前回まで
/* SQL分析用フォーマット */
typedef struct ST_SQL {
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; /* ソート項目 */
}
前回、色々な事を書きました。
が、すみません、更に少し書き足してます。
肝心なテーブル名を忘れてました。
何故128だの64だのって?
気にしないでください。別に150でも100でも良いのです。
更にORG、E、別名ってナニ?
ORGは正式名(日本語)
EはEnglish(物理名)
AはAlias付与後だと思ってください。
何故、+1する記載があるのかって?
気にしてはダメです。
そこは細かい問題です。
何故、ポインタ配列が1024個あるかって。
それは、カラム数上限の問題です。
データベースのカラム上限は、どのDBでも1024程度(例えばDB2では1012)です。
そして、文字列を意識するchar*項目ではないので、彼らについては+1する意味はない。
ふふふ。。。
プログラマしてる皆さん、普段、こういうの意識してないと、最終的に単価に響きますよ?
別にこの事自体は大した事はないのですが。
こういう意識の積み重ねは結局時給へ跳ね返る。
折角単価に反映しやすい仕事をしているのならば、その現場でNo1を目指せば、色々得です。
少なくとも、3年、そういう時期を過ごすのは大いにアリです。
その3年は、人生設計を変えるイベントになる筈です…。
更に、カラム編集文字列はそもそも…
ざっくりした事を書けば、「select」~「from」の間に存在する抽出対象カラム群を、すべて一つの変数に格納するつもりだったのですが。
コレ自体、和名・物理名・別名の3種の変換が必要だと言う事に気がつき(設計書上の表記の問題)、急遽追加に。
ちなみに何故、私が「抽出元は桁数指定で宣言し、カラムはポインター(*)で宣言したのか」わかる人はいるでしょうか。
ここは、プログラミング技術と言うよりも、設計上、ある程度常識的に「そうであろう」考え方に寄り添ったつもりです。
答えがわかる人、わからない人、聞きたい人。
それぞれ興味があれば、コメントしてくださいね^^
また、Strはかの業界一般的に「String」の略。(数値でもなく時刻でもなく、単なる文字列でOK)
(ちなみに、ここまでの記載をする以上、素人はもう、相手にしてません(スマン))
追加した青字部分は"from"句、これがなければSQLとして成り立たない根幹の部分ですので。
短文ですが、あまりに出来が悪かったので、とりあえず。
今後の流れは
「この構造体は1つのselect文しか意識してない、従って大きなselect集団を1つのSQLは理解できないデータ構造」
これをどう解決するのか。
お楽しみに^^