【小技】"空"のUUIDを検出する
【小技】"空"のUUIDを検出する
v11以降,4Dのフィールドには,空の値(文字列は"",数値は0,etc)に加え,ヌルという"状態"が存在し得るようになりました。
ヌルという"状態"は,既存のレコードにフィールドを追加した場合,あるいはコマンドでフィールドをヌルにセットした場合に生まれます。
UUID型のフィールドについては,ヌルと空があるだけでなく,値が代入された経緯により,空の値にもいくつかのバリエーションが存在する,とドキュメントに説明されています。
"" (空の文字列)
"20202020202020202020202020202020" (スペース)
"00000000000000000000000000000000" (ゼロ)
http://doc.4d.com/4Dv15R5/4D/15-R5/Field-properties.300-2964250.ja.html#106190
それで,ヌルまたは空のUUIDをクエリするためには,4パターンの可能性を考慮する必要があります。
フィールドがUUIDであるかどうかをGET FIELD PROPERTIESで知ることはできません。
http://doc.4d.com/4Dv15R5/4D/15-R5/GET-FIELD-PROPERTIES.301-2937352.ja.html
それで,代わりにSQLシステムテーブルを参照することになります。
http://doc.4d.com/4Dv15R5/4D/15-R5/System-Tables.300-2977353.ja.html
みたいなコードを実行すればわかりますが,UUIDのDATA_TYPEは13です。
そのようなわけで,空のUUIDに新しい値を代入するコードは下記のような感じになります。
ヌルという"状態"は,既存のレコードにフィールドを追加した場合,あるいはコマンドでフィールドをヌルにセットした場合に生まれます。
UUID型のフィールドについては,ヌルと空があるだけでなく,値が代入された経緯により,空の値にもいくつかのバリエーションが存在する,とドキュメントに説明されています。
"" (空の文字列)
"20202020202020202020202020202020" (スペース)
"00000000000000000000000000000000" (ゼロ)
http://doc.4d.com/4Dv15R5/4D/15-R5/Field-properties.300-2964250.ja.html#106190
それで,ヌルまたは空のUUIDをクエリするためには,4パターンの可能性を考慮する必要があります。
フィールドがUUIDであるかどうかをGET FIELD PROPERTIESで知ることはできません。
http://doc.4d.com/4Dv15R5/4D/15-R5/GET-FIELD-PROPERTIES.301-2937352.ja.html
それで,代わりにSQLシステムテーブルを参照することになります。
http://doc.4d.com/4Dv15R5/4D/15-R5/System-Tables.300-2977353.ja.html
- Code:
SELECT * FROM _USER_COLUMNS INTO LISTBOX :L;
みたいなコードを実行すればわかりますが,UUIDのDATA_TYPEは13です。
そのようなわけで,空のUUIDに新しい値を代入するコードは下記のような感じになります。
- Code:
ARRAY LONGINT($tabs;0)
ARRAY LONGINT($cols;0)
Begin SQL
select TABLE_ID, COLUMN_ID
from _USER_COLUMNS
WHERE DATA_TYPE = 13
AND DATA_LENGTH = 16
into :$tabs, :$cols;
End SQL
C_LONGINT($i;$end)
$end:=Size of array($tabs)
For ($i;1;$end)
C_POINTER($table;$field)
$table:=Table($tabs{$i})
$field:=Field($tabs{$i};$cols{$i})
//empty values
ARRAY TEXT($t;3)
$t{1}:="20202020202020202020202020202020"
$t{2}:="00000000000000000000000000000000"
$t{3}:=""
QUERY WITH ARRAY($field->;$t)
CREATE SET($table->;"$a")
//null
QUERY BY FORMULA($table->;Is field value Null($field->))
CREATE SET($table->;"$b")
//do something
UNION("$a";"$b";"$c")
APPLY TO SELECTION($table->;$field->:=Generate UUID)
//cleanup
CLEAR SET("$a")
CLEAR SET("$b")
CLEAR SET("$c")
End for
miyako- 投稿数 : 468
登録日 : 2016/07/05
Permissions in this forum:
返信投稿: 不可
|
|