Skip to content

Commit 873212e

Browse files
committed
fixes #30
1 parent 92d4418 commit 873212e

File tree

6 files changed

+480
-46
lines changed

6 files changed

+480
-46
lines changed

OM_TAPIGEN.pkb

Lines changed: 82 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,13 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
227227
data_scale,
228228
char_length,
229229
identity_type,
230+
$IF dbms_db_version.ver_le_11_1 $THEN
231+
'N' AS default_on_null_yn,
232+
$ELSE $IF dbms_db_version.ver_le_11_2 $THEN
233+
'N' AS default_on_null_yn,
234+
$ELSE
235+
CASE WHEN default_on_null = 'YES' THEN 'Y' ELSE 'N' END AS default_on_null_yn,
236+
$END $END
230237
CASE
231238
WHEN data_default IS NOT NULL THEN
232239
(SELECT om_tapigen.util_get_column_data_default(p_owner => g_params.owner,
@@ -268,6 +275,7 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
268275
NULL AS data_custom_default,
269276
NULL AS custom_default_source,
270277
identity_type,
278+
default_on_null_yn,
271279
'N' AS is_pk_yn,
272280
'N' AS is_uk_yn,
273281
'N' AS is_fk_yn,
@@ -797,6 +805,7 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
797805
v_return.data_custom_default := g_columns(i).data_custom_default;
798806
v_return.custom_default_source := g_columns(i).custom_default_source;
799807
v_return.identity_type := g_columns(i).identity_type;
808+
v_return.default_on_null_yn := g_columns(i).default_on_null_yn;
800809
v_return.is_pk_yn := g_columns(i).is_pk_yn;
801810
v_return.is_uk_yn := g_columns(i).is_uk_yn;
802811
v_return.is_fk_yn := g_columns(i).is_fk_yn;
@@ -905,7 +914,8 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
905914
-----------------------------------------------------------------------------
906915

907916
FUNCTION util_generate_list(p_list_name VARCHAR2) RETURN t_tab_vc2_5k IS
908-
917+
918+
909919
-----------------------------------------------------------------------------
910920
-- Columns as flat list for insert - without p_column_exclude_list:
911921
-- {% LIST_INSERT_COLUMNS %}
@@ -920,9 +930,16 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
920930
v_result t_tab_vc2_5k;
921931
BEGIN
922932
FOR i IN g_columns.first .. g_columns.last LOOP
923-
IF g_columns(i).is_excluded_yn = 'N' AND
924-
NOT (g_template_options.hide_identity_columns AND
925-
nvl(g_columns(i).identity_type, 'NULL') IN ('ALWAYS', 'BY DEFAULT')) THEN
933+
IF g_columns(i).is_excluded_yn = 'N'
934+
AND NOT (
935+
g_template_options.hide_identity_columns
936+
AND (
937+
nvl(g_columns(i).identity_type, 'NULL') = 'ALWAYS'
938+
OR
939+
nvl(g_columns(i).identity_type, 'NULL') = 'BY DEFAULT' AND g_columns(i).default_on_null_yn = 'N'
940+
)
941+
)
942+
THEN
926943
v_result(v_result.count + 1) := ' ' || '"' || g_columns(i).column_name || '"' || CASE
927944
WHEN g_columns(i).is_pk_yn = 'Y' THEN
928945
' /*PK*/'
@@ -955,9 +972,16 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
955972
v_result t_tab_vc2_5k;
956973
BEGIN
957974
FOR i IN g_columns.first .. g_columns.last LOOP
958-
IF g_columns(i).is_excluded_yn = 'N' AND
959-
NOT (g_template_options.hide_identity_columns AND
960-
nvl(g_columns(i).identity_type, 'NULL') IN ('ALWAYS', 'BY DEFAULT')) THEN
975+
IF g_columns(i).is_excluded_yn = 'N'
976+
AND NOT (
977+
g_template_options.hide_identity_columns
978+
AND (
979+
nvl(g_columns(i).identity_type, 'NULL') = 'ALWAYS'
980+
OR
981+
nvl(g_columns(i).identity_type, 'NULL') = 'BY DEFAULT' AND g_columns(i).default_on_null_yn = 'N'
982+
)
983+
)
984+
THEN
961985
v_result(v_result.count + 1) := ' ' || CASE
962986
WHEN g_columns(i).is_pk_yn = 'Y' AND NOT g_status.pk_is_multi_column AND g_params.sequence_name IS NOT NULL THEN
963987
'COALESCE( ' || util_get_parameter_name(g_columns(i).column_name, NULL) || ', "' || g_params.sequence_name ||
@@ -1095,9 +1119,16 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
10951119
v_result t_tab_vc2_5k;
10961120
BEGIN
10971121
FOR i IN g_columns.first .. g_columns.last LOOP
1098-
IF g_columns(i).is_excluded_yn = 'N' AND
1099-
NOT (g_template_options.hide_identity_columns AND
1100-
nvl(g_columns(i).identity_type, 'NULL') IN ('ALWAYS', 'BY DEFAULT')) THEN
1122+
IF g_columns(i).is_excluded_yn = 'N'
1123+
AND NOT (
1124+
g_template_options.hide_identity_columns
1125+
AND (
1126+
nvl(g_columns(i).identity_type, 'NULL') = 'ALWAYS'
1127+
OR
1128+
nvl(g_columns(i).identity_type, 'NULL') = 'BY DEFAULT' AND g_columns(i).default_on_null_yn = 'N'
1129+
)
1130+
)
1131+
THEN
11011132
v_result(v_result.count + 1) := CASE
11021133
WHEN g_template_options.padding IS NOT NULL THEN
11031134
rpad(' ', g_template_options.padding)
@@ -1154,9 +1185,16 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
11541185
v_result t_tab_vc2_5k;
11551186
BEGIN
11561187
FOR i IN g_columns.first .. g_columns.last LOOP
1157-
IF g_columns(i).is_excluded_yn = 'N' AND
1158-
NOT (g_template_options.hide_identity_columns AND
1159-
nvl(g_columns(i).identity_type, 'NULL') IN ('ALWAYS', 'BY DEFAULT')) THEN
1188+
IF g_columns(i).is_excluded_yn = 'N'
1189+
AND NOT (
1190+
g_template_options.hide_identity_columns
1191+
AND (
1192+
nvl(g_columns(i).identity_type, 'NULL') = 'ALWAYS'
1193+
OR
1194+
nvl(g_columns(i).identity_type, 'NULL') = 'BY DEFAULT' AND g_columns(i).default_on_null_yn = 'N'
1195+
)
1196+
)
1197+
THEN
11601198
v_result(v_result.count + 1) := ' ' ||
11611199
util_get_parameter_name(g_columns(i).column_name, g_status.rpad_columns) ||
11621200
' IN "' || g_params.table_name || '".' ||
@@ -1231,7 +1269,16 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
12311269
v_result t_tab_vc2_5k;
12321270
BEGIN
12331271
FOR i IN g_columns.first .. g_columns.last LOOP
1234-
IF g_columns(i).is_excluded_yn = 'N' THEN
1272+
IF g_columns(i).is_excluded_yn = 'N'
1273+
AND NOT (
1274+
g_template_options.hide_identity_columns
1275+
AND (
1276+
nvl(g_columns(i).identity_type, 'NULL') = 'ALWAYS'
1277+
OR
1278+
nvl(g_columns(i).identity_type, 'NULL') = 'BY DEFAULT' AND g_columns(i).default_on_null_yn = 'N'
1279+
)
1280+
)
1281+
THEN
12351282
v_result(v_result.count + 1) := ' ' ||
12361283
util_get_parameter_name(g_columns(i).column_name, g_status.rpad_columns) ||
12371284
' => :new."' || g_columns(i).column_name || '"' || CASE
@@ -1266,9 +1313,16 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
12661313
v_result t_tab_vc2_5k;
12671314
BEGIN
12681315
FOR i IN g_columns.first .. g_columns.last LOOP
1269-
IF g_columns(i).is_excluded_yn = 'N' AND
1270-
NOT (g_template_options.hide_identity_columns AND
1271-
nvl(g_columns(i).identity_type, 'NULL') IN ('ALWAYS', 'BY DEFAULT')) THEN
1316+
IF g_columns(i).is_excluded_yn = 'N'
1317+
AND NOT (
1318+
g_template_options.hide_identity_columns
1319+
AND (
1320+
nvl(g_columns(i).identity_type, 'NULL') = 'ALWAYS'
1321+
OR
1322+
nvl(g_columns(i).identity_type, 'NULL') = 'BY DEFAULT' AND g_columns(i).default_on_null_yn = 'N'
1323+
)
1324+
)
1325+
THEN
12721326
v_result(v_result.count + 1) := CASE
12731327
WHEN g_template_options.padding IS NOT NULL THEN
12741328
rpad(' ', g_template_options.padding)
@@ -1308,9 +1362,16 @@ CREATE OR REPLACE PACKAGE BODY om_tapigen IS
13081362
v_result t_tab_vc2_5k;
13091363
BEGIN
13101364
FOR i IN g_columns.first .. g_columns.last LOOP
1311-
IF g_columns(i).is_excluded_yn = 'N' AND
1312-
NOT (g_template_options.hide_identity_columns AND
1313-
nvl(g_columns(i).identity_type, 'NULL') IN ('ALWAYS', 'BY DEFAULT')) THEN
1365+
IF g_columns(i).is_excluded_yn = 'N'
1366+
AND NOT (
1367+
g_template_options.hide_identity_columns
1368+
AND (
1369+
nvl(g_columns(i).identity_type, 'NULL') = 'ALWAYS'
1370+
OR
1371+
nvl(g_columns(i).identity_type, 'NULL') = 'BY DEFAULT' AND g_columns(i).default_on_null_yn = 'N'
1372+
)
1373+
)
1374+
THEN
13141375
v_result(v_result.count + 1) := ' ' ||
13151376
util_get_parameter_name(g_columns(i).column_name, g_status.rpad_columns) ||
13161377
' => p_row."' || g_columns(i).column_name || '"' || CASE
@@ -3724,7 +3785,7 @@ BEGIN
37243785
WHEN g_params.enable_insertion_of_rows THEN
37253786
'
37263787
"{{ API_NAME }}".create_row (
3727-
{% LIST_MAP_PAR_EQ_NEWCOL_W_PK %} );'
3788+
{% LIST_MAP_PAR_EQ_NEWCOL_W_PK hide_identity_columns=true %} );'
37283789
ELSE
37293790
'
37303791
raise_application_error (' || c_generator_error_number ||

OM_TAPIGEN.pks

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CREATE OR REPLACE PACKAGE om_tapigen AUTHID CURRENT_USER IS
22
c_generator CONSTANT VARCHAR2(10 CHAR) := 'OM_TAPIGEN';
3-
c_generator_version CONSTANT VARCHAR2(10 CHAR) := '0.5.1';
3+
c_generator_version CONSTANT VARCHAR2(10 CHAR) := '0.5.2';
44
/**
55

66
Oracle PL/SQL Table API Generator
@@ -188,6 +188,7 @@ TYPE t_rec_columns IS RECORD(
188188
data_custom_default VARCHAR2(4000 CHAR),
189189
custom_default_source VARCHAR2(15 CHAR),
190190
identity_type VARCHAR2(15 CHAR),
191+
default_on_null_yn VARCHAR2(1 CHAR),
191192
is_pk_yn VARCHAR2(1 CHAR),
192193
is_uk_yn VARCHAR2(1 CHAR),
193194
is_fk_yn VARCHAR2(1 CHAR),

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ SIGNATURE
8484
```sql
8585
PACKAGE om_tapigen AUTHID CURRENT_USER IS
8686
c_generator CONSTANT VARCHAR2(10 CHAR) := 'OM_TAPIGEN';
87-
c_generator_version CONSTANT VARCHAR2(10 CHAR) := '0.5.1';
87+
c_generator_version CONSTANT VARCHAR2(10 CHAR) := '0.5.2';
8888
```
8989

9090

docs/changelog.md

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Please use for all comments, discussions, feature requests or bug reports the Gi
99

1010
<!-- toc -->
1111

12+
- [0.5.2 (2020-05-09)](#052-2020-05-09)
1213
- [0.5.1 (2020-04-19)](#051-2020-04-19)
1314
- [0.5.0 (2018-12-23)](#050-2018-12-23)
1415
- [0.4.1 (2017-05-27)](#041-2017-05-27)
@@ -19,11 +20,14 @@ Please use for all comments, discussions, feature requests or bug reports the Gi
1920

2021
<!-- tocstop -->
2122

23+
## 0.5.2 (2020-05-09)
24+
25+
Fixes #30: Primary key missing from create_row when identity column is used as PK - thanks to PaoloM (github.com/softinn72) to report this issue.
26+
2227
## 0.5.1 (2020-04-19)
2328

2429
Fixes #29: Primary key not returned on create_row when XMLTYPE column is present - thanks to PaoloM (github.com/softinn72) to report this issue.
2530

26-
2731
## 0.5.0 (2018-12-23)
2832

2933
Special thanks to Jacek Gębal (github.com/jgebal), Peter Ettinger (github.com/pettinger) and PaoloM (github.com/softinn72) for the valuable feedback in several issues.
@@ -32,21 +36,21 @@ ATTENTION: When installed in a central tools schema you need from version 0.5 on
3236

3337
New support for multi column primary keys:
3438

35-
- NOT generated: get_pk_by_unique_cols functions - use instead read_row functions, which are also overloaded with unique constraint params and returning the whole row
36-
- NOT supported: use of generic change log (p_enable_generic_change_log)
39+
- NOT generated: get_pk_by_unique_cols functions - use instead read_row functions, which are also overloaded with unique constraint params and returning the whole row
40+
- NOT supported: use of generic change log (p_enable_generic_change_log)
3741

3842
New parameters:
3943

40-
- `p_owner ALL_USERS.USERNAME%TYPE DEFAULT USER`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_owner)
41-
- `p_enable_column_defaults BOOLEAN DEFAULT FALSE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_column_defaults)
42-
- `p_enable_parameter_prefixes BOOLEAN DEFAULT TRUE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_parameter_prefixes)
43-
- `p_enable_proc_with_out_params BOOLEAN DEFAULT TRUE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_proc_with_out_params)
44-
- `p_enable_getter_and_setter BOOLEAN DEFAULT TRUE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_getter_and_setter)
45-
- `p_return_row_instead_of_pk BOOLEAN DEFAULT FALSE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_return_row_instead_of_pk)
46-
- `p_api_name VARCHAR2 DEFAULT NULL`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_api_name)
47-
- `p_exclude_column_list VARCHAR2 DEFAULT NULL`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_exclude_column_list)
48-
- `p_enable_custom_defaults BOOLEAN DEFAULT FALSE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_custom_defaults)
49-
- `p_custom_default_values XMLTYPE DEFAULT NULL`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_custom_default_values)
44+
- `p_owner ALL_USERS.USERNAME%TYPE DEFAULT USER`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_owner)
45+
- `p_enable_column_defaults BOOLEAN DEFAULT FALSE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_column_defaults)
46+
- `p_enable_parameter_prefixes BOOLEAN DEFAULT TRUE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_parameter_prefixes)
47+
- `p_enable_proc_with_out_params BOOLEAN DEFAULT TRUE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_proc_with_out_params)
48+
- `p_enable_getter_and_setter BOOLEAN DEFAULT TRUE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_getter_and_setter)
49+
- `p_return_row_instead_of_pk BOOLEAN DEFAULT FALSE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_return_row_instead_of_pk)
50+
- `p_api_name VARCHAR2 DEFAULT NULL`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_api_name)
51+
- `p_exclude_column_list VARCHAR2 DEFAULT NULL`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_exclude_column_list)
52+
- `p_enable_custom_defaults BOOLEAN DEFAULT FALSE`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_enable_custom_defaults)
53+
- `p_custom_default_values XMLTYPE DEFAULT NULL`: [docs](https://github.com/OraMUC/table-api-generator/blob/master/docs/parameters.md#p_custom_default_values)
5054

5155
Other things, mostly internals, the visible one is better formatted API code:
5256

@@ -67,12 +71,10 @@ Other things, mostly internals, the visible one is better formatted API code:
6771
- In the second step we want to use also utPLSQL for tests
6872
- Many rework in the background, mainly for the multi column primary keys - Thank you Peter ;-)
6973

70-
7174
## 0.4.1 (2017-05-27)
7275

7376
- Fixes #5: Parameter with PK is not used to insert - thanks to Jacek Gębal to report this issue
7477

75-
7678
## 0.4.0 (2017-03-30)
7779

7880
New generated API functions / procedures:
@@ -95,21 +97,18 @@ Other stuff:
9597
- renaming internal variables more consistently
9698
- supporting special column names, by using quotes around column names and validating / converting parameter names
9799

98-
99100
## 0.3.0 (2016-07-03)
100101

101102
- First public release
102103
- André: Complete redesign with global package collections and initialisation phase to avoid many dictionary queries
103104
- Ottmar: Integration of all dependencies as package utilities, template engine to avoid many replace statements, integration in SQL-Developer, save parameters in source code for easy recreation
104105

105-
106106
## 0.2.0 (not published)
107107

108108
- André: Read row procedure for APEX with out parameters for the page items, rowtype based methods
109109
- Ottmar: Generic change log, get pk by unique columns function, idea for rowtype based methods
110110

111-
112111
## 0.1.0 (not published)
113112

114113
- André: Idea and first running version
115-
- Ottmar: Fan of the idea and first usage in a project :-)
114+
- Ottmar: Fan of the idea and first usage in a project :-)

0 commit comments

Comments
 (0)