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
54
55
56
57
58
59
60
61
62
63
64
65
|
[define_tag( 'list',
-namespace = 'field',
-optional = 'params',-copy,
-optional = 'mode',
-description= '[field_list] - Compare action_params with the datasource'
);
// returns: set
// -params: An array of pairs (typically action_params)
// -mode == 'missing' = returns set - missing fields
// -mode == 'unused' = returns set - unused fields (not updated/searched on etc)
// -mode == 'difference' = returns set - difference between source and target field sets
// -mode else = returns set - target's fields
fail_if: (local:'params')->type != 'array',-2, #_ref': Requires an array of pairs (action_params)';
!(local_defined:'mode') ? local:'mode'='default';
local:'_copyParams' = '-Database,-Table,-Layout'->split(',');
local:'_actionFields' = set;
local:'_inline' = array;
local:'_ref' = 'field_'+tag_name;
// Seperate fields from "-params"
iterate:#params,(local:'pair');
local:'_param' = string(#pair->get(1));
local:'_value' = string(#pair->get(2));
#_param->beginsWith('-')=='false'?
#_actionFields->insert(#_param)
| (#_copyParams >> #_param ? #_inline->insert(#_param = #_value));
/iterate;
fail_if: #_inline->size == 0 , -2, #_ref': Missing schema params';
fail_if: #_inline !>> '-Database' , -2, #_ref': database param';
fail_if: #_inline !>> '-Layout' && #_inline !>> '-Table' , -2, #_ref': Missing -table or -layout param';
// Pull true field names
inline:#_inline,-show;
local:'_tableFields' = set;
#_tableFields->insertFrom(field_names->iterator);
/inline;
if:#mode == 'missing';
local:'_missing'=set;
iterate:#_actionFields,(local:'_param');
#_tablefields !>> #_param ? #_missing->insert(#_param);
/iterate;
return:#_missing;
else:#mode == 'unused';
local:'_unused'=set;
iterate:#_tablefields,(local:'_param');
#_actionFields !>> #_param ? #_unused->insert(#_param);
/iterate;
return:#_unused;
else:#mode == 'difference';
return:#_tableFields->difference(#_actionFields);
else;
fail:-2,Namespace_Current #_ref': Unknown mode: '#mode;
/if;
/define_tag]
|