forked from 4D-JP/code-audit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchange_primary_key_from_int_to_uuid.txt
53 lines (41 loc) · 1.46 KB
/
change_primary_key_from_int_to_uuid.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
ARRAY LONGINT($TABLE_IDS;0)
ARRAY TEXT($TABLE_NAMES;0)
Begin SQL
/* all tables with a primary key */
SELECT TABLE_ID,TABLE_NAME
FROM _USER_TABLES
WHERE _USER_TABLES.TABLE_ID IN
(SELECT TABLE_ID FROM _USER_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'P')
INTO :$TABLE_IDS,:$TABLE_NAMES;
End SQL
For ($i;1;Size of array($TABLE_IDS))
$TABLE_ID:=$TABLE_IDS{$i}
$TABLE_NAME:=$TABLE_NAMES{$i}
$primaryKeyName:=""
$COLUMN_ID:=0
Begin SQL
SELECT _USER_CONS_COLUMNS.COLUMN_NAME,_USER_CONS_COLUMNS.COLUMN_ID
FROM _USER_CONSTRAINTS,_USER_CONS_COLUMNS
WHERE CONSTRAINT_TYPE = 'P'
AND _USER_CONS_COLUMNS.TABLE_ID = :$TABLE_ID
AND _USER_CONS_COLUMNS.CONSTRAINT_ID = _USER_CONSTRAINTS.CONSTRAINT_ID
INTO :$primaryKeyName,:$COLUMN_ID;
End SQL
$indexName:=$TABLE_NAME+"."+$primaryKeyName
$SQL:="ALTER TABLE "+"["+$TABLE_NAME+"] DISABLE LOG;"+\
"ALTER TABLE "+"["+$TABLE_NAME+"] DROP PRIMARY KEY;"+\
"ALTER TABLE "+"["+$TABLE_NAME+"] DROP "+"["+$primaryKeyName+"];"+\
"ALTER TABLE "+"["+$TABLE_NAME+"] ADD ["+$primaryKeyName+"] UUID AUTO_GENERATE;"
Begin SQL
EXECUTE IMMEDIATE :$SQL;
End SQL
$field:=Field($TABLE_ID;$COLUMN_ID)
ALL RECORDS(Table($TABLE_ID)->)
$table:=Table($TABLE_ID) //to avoid compile error in line below
APPLY TO SELECTION($table->;$field->:=Generate UUID)
$SQL:="ALTER TABLE "+"["+$TABLE_NAME+"] ADD PRIMARY KEY (["+$primaryKeyName+"]);"+\
"ALTER TABLE "+"["+$TABLE_NAME+"] ENABLE LOG;"
Begin SQL
EXECUTE IMMEDIATE :$SQL;
End SQL
End for