sqlchecker 0.3.1__tar.gz → 0.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/PKG-INFO +1 -1
  2. sqlchecker-0.3.2/datasets/catalogs/unicorsi.json +473 -0
  3. sqlchecker-0.3.2/datasets/sql/unicorsi.sql +376 -0
  4. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/pyproject.toml +1 -1
  5. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/src/sqlchecker/detectors/syntax.py +31 -16
  6. sqlchecker-0.3.1/tests/1_syn/test_001_ambiguous_column.py → sqlchecker-0.3.2/tests/1_syn/test_002_ambiguous_column.py +1 -0
  7. sqlchecker-0.3.1/tests/1_syn/test_005_undefined_parameter.py → sqlchecker-0.3.2/tests/1_syn/test_006_undefined_parameter.py +1 -0
  8. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/1_syn/test_014_aggregate_function_outside_select_or_having.py +7 -2
  9. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/1_syn/test_016_extraneous_omitted_grouping_column.py +21 -6
  10. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/.gitignore +0 -0
  11. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/.readthedocs.yaml +0 -0
  12. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/LICENSE +0 -0
  13. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/Makefile +0 -0
  14. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/README.md +0 -0
  15. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/datasets/catalogs/constraints.json +0 -0
  16. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/datasets/catalogs/miedema.json +0 -0
  17. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/datasets/sql/constraints.sql +0 -0
  18. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/datasets/sql/miedema.sql +0 -0
  19. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/docs/Makefile +0 -0
  20. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/docs/conf.py +0 -0
  21. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/docs/index.rst +0 -0
  22. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/docs/make.bat +0 -0
  23. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/docs/requirements.txt +0 -0
  24. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/requirements.txt +0 -0
  25. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/src/sqlchecker/__init__.py +0 -0
  26. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/src/sqlchecker/detectors/__init__.py +0 -0
  27. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/src/sqlchecker/detectors/base.py +0 -0
  28. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/src/sqlchecker/detectors/complications.py +0 -0
  29. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/src/sqlchecker/detectors/logical.py +0 -0
  30. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/src/sqlchecker/detectors/semantic.py +0 -0
  31. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/test_detector.py +0 -0
  32. /sqlchecker-0.3.1/tests/1_syn/test_003_undefined_column.py → /sqlchecker-0.3.2/tests/1_syn/test_004_undefined_column.py +0 -0
  33. /sqlchecker-0.3.1/tests/1_syn/test_004_undefined_function.py → /sqlchecker-0.3.2/tests/1_syn/test_005_undefined_function.py +0 -0
  34. /sqlchecker-0.3.1/tests/1_syn/test_006_undefined_object.py → /sqlchecker-0.3.2/tests/1_syn/test_007_undefined_object.py +0 -0
  35. /sqlchecker-0.3.1/tests/1_syn/test_007_invalid_schema_names.py → /sqlchecker-0.3.2/tests/1_syn/test_008_invalid_schema_names.py +0 -0
  36. /sqlchecker-0.3.1/tests/1_syn/test_008_misspellings.py → /sqlchecker-0.3.2/tests/1_syn/test_009_misspellings.py +0 -0
  37. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/1_syn/test_013_data_type_mismatch.py +0 -0
  38. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/1_syn/test_015_nested_aggregate_functions.py +0 -0
  39. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/1_syn/test_017_having_without_group_by.py +0 -0
  40. /sqlchecker-0.3.1/tests/1_syn/test_021_using_where_twice.py → /sqlchecker-0.3.2/tests/1_syn/test_019_using_where_twice.py +0 -0
  41. /sqlchecker-0.3.1/tests/1_syn/test_022_omitted_from.py → /sqlchecker-0.3.2/tests/1_syn/test_020_omitted_from.py +0 -0
  42. /sqlchecker-0.3.1/tests/1_syn/test_024_comparison_with_null.py → /sqlchecker-0.3.2/tests/1_syn/test_021_comparison_with_null.py +0 -0
  43. /sqlchecker-0.3.1/tests/1_syn/test_024_036_additional_omitted_semicolons.py → /sqlchecker-0.3.2/tests/1_syn/test_022_038_additional_omitted_semicolons.py +0 -0
  44. /sqlchecker-0.3.1/tests/1_syn/test_026_duplicate_clause.py → /sqlchecker-0.3.2/tests/1_syn/test_024_duplicate_clause.py +0 -0
  45. /sqlchecker-0.3.1/tests/1_syn/test_018_too_many_columns_in_subquery.py → /sqlchecker-0.3.2/tests/1_syn/test_026_too_many_columns_in_subquery.py +0 -0
  46. /sqlchecker-0.3.1/tests/1_syn/test_029_keywords_order.py → /sqlchecker-0.3.2/tests/1_syn/test_030_keywords_order.py +0 -0
  47. /sqlchecker-0.3.1/tests/1_syn/test_012_is_where_not_applicable.py → /sqlchecker-0.3.2/tests/1_syn/test_035_is_where_not_applicable.py +0 -0
  48. /sqlchecker-0.3.1/tests/1_syn/test_035_nonstandard_operators.py → /sqlchecker-0.3.2/tests/1_syn/test_037_nonstandard_operators.py +0 -0
  49. /sqlchecker-0.3.1/tests/1_syn/test_032_033_curly_square_or_unmatched_brackets.py → /sqlchecker-0.3.2/tests/1_syn/test_107_108_curly_square_or_unmatched_brackets.py +0 -0
  50. /sqlchecker-0.3.1/tests/2_sem/test_038_tautological_inconsistent_expressions.py → /sqlchecker-0.3.2/tests/2_sem/test_040_tautological_inconsistent_expressions.py +0 -0
  51. /sqlchecker-0.3.1/tests/2_sem/test_039_distinct_sum_avg.py → /sqlchecker-0.3.2/tests/2_sem/test_041_distinct_sum_avg.py +0 -0
  52. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/2_sem/test_050_constant_column_output.py +0 -0
  53. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/2_sem/test_051_duplicate_column_output.py +0 -0
  54. /sqlchecker-0.3.1/tests/3_log/test_067_wildcards_without_like.py → /sqlchecker-0.3.2/tests/3_log/test_043_wildcards_without_like.py +0 -0
  55. /sqlchecker-0.3.1/tests/3_log/test_058_join_on_incorrect_table.py → /sqlchecker-0.3.2/tests/3_log/test_058_incorrect_table_reference.py +0 -0
  56. /sqlchecker-0.3.1/tests/3_log/test_059_join_when_join_needs_to_be_omitted.py → /sqlchecker-0.3.2/tests/3_log/test_059_extraneous_table_reference.py +0 -0
  57. /sqlchecker-0.3.1/tests/3_log/test_062_missing_join.py → /sqlchecker-0.3.2/tests/3_log/test_062_missing_table_reference.py +0 -0
  58. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_070_extraneous_column_in_select.py +0 -0
  59. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_071_missing_column_from_select.py +0 -0
  60. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_072_missing_distinct_from_select.py +0 -0
  61. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_073_missing_as_from_select.py +0 -0
  62. /sqlchecker-0.3.1/tests/3_log/test_068_069_wrong_invalid_wildcard.py → /sqlchecker-0.3.2/tests/3_log/test_110_111_wrong_invalid_wildcard.py +0 -0
  63. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_112_118_missing_extraneous_where_clause.py +0 -0
  64. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_113_119_missing_extraneous_group_by_clause.py +0 -0
  65. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_114_120_missing_extraneous_having_clause.py +0 -0
  66. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_115_121_missing_extraneous_order_by_clause.py +0 -0
  67. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_116_121_123_missing_extraneous_incorrect_limit_clause.py +0 -0
  68. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/3_log/test_117_122_missing_extraneous_incorrect_offset_clause.py +0 -0
  69. /sqlchecker-0.3.1/tests/4_com/test_096_unnecessary_distinct_in_select.py → /sqlchecker-0.3.2/tests/4_com/test_083_unnecessary_distinct_in_select.py +0 -0
  70. /sqlchecker-0.3.1/tests/4_com/test_102_like_without_wildcards.py → /sqlchecker-0.3.2/tests/4_com/test_088_like_without_wildcards.py +0 -0
  71. /sqlchecker-0.3.1/tests/4_com/test_106_unnecessary_distinct_in_aggregate_function.py → /sqlchecker-0.3.2/tests/4_com/test_092_unnecessary_distinct_in_aggregate_function.py +0 -0
  72. /sqlchecker-0.3.1/tests/4_com/test_109_group_by_with_singleton_groups.py → /sqlchecker-0.3.2/tests/4_com/test_095_group_by_with_singleton_groups.py +0 -0
  73. /sqlchecker-0.3.1/tests/4_com/test_111_group_by_can_be_replaced_by_distinct.py → /sqlchecker-0.3.2/tests/4_com/test_097_group_by_can_be_replaced_by_distinct.py +0 -0
  74. /sqlchecker-0.3.1/tests/4_com/test_114_order_by_in_subquery.py → /sqlchecker-0.3.2/tests/4_com/test_100_order_by_in_subquery.py +0 -0
  75. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/4_com/test_126_unused_cte.py +0 -0
  76. {sqlchecker-0.3.1 → sqlchecker-0.3.2}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlchecker
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Summary: This project analyses SQL statements and labels possible errors or complications.
5
5
  Project-URL: Repository, https://github.com/DavidePonzini/sqlchecker
6
6
  Project-URL: Documentation, https://sqlchecker.readthedocs.io/en/latest/index.html
@@ -0,0 +1,473 @@
1
+ {
2
+ "version": 1,
3
+ "schemas": {
4
+ "unicorsi": {
5
+ "name": "unicorsi",
6
+ "tables": {
7
+ "corsi": {
8
+ "name": "corsi",
9
+ "unique_constraints": [
10
+ {
11
+ "columns": [
12
+ {
13
+ "name": "denominazione",
14
+ "table_idx": null
15
+ },
16
+ {
17
+ "name": "corsodilaurea",
18
+ "table_idx": null
19
+ }
20
+ ],
21
+ "is_pk": false
22
+ },
23
+ {
24
+ "columns": [
25
+ {
26
+ "name": "id",
27
+ "table_idx": null
28
+ }
29
+ ],
30
+ "is_pk": true
31
+ }
32
+ ],
33
+ "columns": [
34
+ {
35
+ "name": "corsodilaurea",
36
+ "column_type": "numeric",
37
+ "numeric_precision": 3,
38
+ "numeric_scale": 0,
39
+ "is_nullable": false,
40
+ "fk_schema": "unicorsi",
41
+ "fk_table": "corsidilaurea",
42
+ "fk_column": "id"
43
+ },
44
+ {
45
+ "name": "professore",
46
+ "column_type": "numeric",
47
+ "numeric_precision": 5,
48
+ "numeric_scale": 0,
49
+ "is_nullable": true,
50
+ "fk_schema": "unicorsi",
51
+ "fk_table": "professori",
52
+ "fk_column": "id"
53
+ },
54
+ {
55
+ "name": "denominazione",
56
+ "column_type": "character varying",
57
+ "numeric_precision": null,
58
+ "numeric_scale": null,
59
+ "is_nullable": false,
60
+ "fk_schema": null,
61
+ "fk_table": null,
62
+ "fk_column": null
63
+ },
64
+ {
65
+ "name": "id",
66
+ "column_type": "character",
67
+ "numeric_precision": null,
68
+ "numeric_scale": null,
69
+ "is_nullable": false,
70
+ "fk_schema": null,
71
+ "fk_table": null,
72
+ "fk_column": null
73
+ },
74
+ {
75
+ "name": "attivato",
76
+ "column_type": "boolean",
77
+ "numeric_precision": null,
78
+ "numeric_scale": null,
79
+ "is_nullable": false,
80
+ "fk_schema": null,
81
+ "fk_table": null,
82
+ "fk_column": null
83
+ }
84
+ ]
85
+ },
86
+ "studenti": {
87
+ "name": "studenti",
88
+ "unique_constraints": [
89
+ {
90
+ "columns": [
91
+ {
92
+ "name": "corsodilaurea",
93
+ "table_idx": null
94
+ },
95
+ {
96
+ "name": "luogonascita",
97
+ "table_idx": null
98
+ },
99
+ {
100
+ "name": "nome",
101
+ "table_idx": null
102
+ },
103
+ {
104
+ "name": "cognome",
105
+ "table_idx": null
106
+ },
107
+ {
108
+ "name": "datanascita",
109
+ "table_idx": null
110
+ }
111
+ ],
112
+ "is_pk": false
113
+ },
114
+ {
115
+ "columns": [
116
+ {
117
+ "name": "matricola",
118
+ "table_idx": null
119
+ }
120
+ ],
121
+ "is_pk": true
122
+ }
123
+ ],
124
+ "columns": [
125
+ {
126
+ "name": "corsodilaurea",
127
+ "column_type": "numeric",
128
+ "numeric_precision": 3,
129
+ "numeric_scale": 0,
130
+ "is_nullable": false,
131
+ "fk_schema": "unicorsi",
132
+ "fk_table": "corsidilaurea",
133
+ "fk_column": "id"
134
+ },
135
+ {
136
+ "name": "relatore",
137
+ "column_type": "numeric",
138
+ "numeric_precision": 5,
139
+ "numeric_scale": 0,
140
+ "is_nullable": true,
141
+ "fk_schema": "unicorsi",
142
+ "fk_table": "professori",
143
+ "fk_column": "id"
144
+ },
145
+ {
146
+ "name": "nome",
147
+ "column_type": "character varying",
148
+ "numeric_precision": null,
149
+ "numeric_scale": null,
150
+ "is_nullable": false,
151
+ "fk_schema": null,
152
+ "fk_table": null,
153
+ "fk_column": null
154
+ },
155
+ {
156
+ "name": "matricola",
157
+ "column_type": "character varying",
158
+ "numeric_precision": null,
159
+ "numeric_scale": null,
160
+ "is_nullable": false,
161
+ "fk_schema": null,
162
+ "fk_table": null,
163
+ "fk_column": null
164
+ },
165
+ {
166
+ "name": "luogonascita",
167
+ "column_type": "character varying",
168
+ "numeric_precision": null,
169
+ "numeric_scale": null,
170
+ "is_nullable": false,
171
+ "fk_schema": null,
172
+ "fk_table": null,
173
+ "fk_column": null
174
+ },
175
+ {
176
+ "name": "cognome",
177
+ "column_type": "character varying",
178
+ "numeric_precision": null,
179
+ "numeric_scale": null,
180
+ "is_nullable": false,
181
+ "fk_schema": null,
182
+ "fk_table": null,
183
+ "fk_column": null
184
+ },
185
+ {
186
+ "name": "residenza",
187
+ "column_type": "character varying",
188
+ "numeric_precision": null,
189
+ "numeric_scale": null,
190
+ "is_nullable": false,
191
+ "fk_schema": null,
192
+ "fk_table": null,
193
+ "fk_column": null
194
+ },
195
+ {
196
+ "name": "laurea",
197
+ "column_type": "date",
198
+ "numeric_precision": null,
199
+ "numeric_scale": null,
200
+ "is_nullable": true,
201
+ "fk_schema": null,
202
+ "fk_table": null,
203
+ "fk_column": null
204
+ },
205
+ {
206
+ "name": "iscrizione",
207
+ "column_type": "integer",
208
+ "numeric_precision": 32,
209
+ "numeric_scale": 0,
210
+ "is_nullable": false,
211
+ "fk_schema": null,
212
+ "fk_table": null,
213
+ "fk_column": null
214
+ },
215
+ {
216
+ "name": "datanascita",
217
+ "column_type": "date",
218
+ "numeric_precision": null,
219
+ "numeric_scale": null,
220
+ "is_nullable": false,
221
+ "fk_schema": null,
222
+ "fk_table": null,
223
+ "fk_column": null
224
+ }
225
+ ]
226
+ },
227
+ "esami": {
228
+ "name": "esami",
229
+ "unique_constraints": [
230
+ {
231
+ "columns": [
232
+ {
233
+ "name": "studente",
234
+ "table_idx": null
235
+ },
236
+ {
237
+ "name": "corso",
238
+ "table_idx": null
239
+ },
240
+ {
241
+ "name": "data",
242
+ "table_idx": null
243
+ }
244
+ ],
245
+ "is_pk": true
246
+ }
247
+ ],
248
+ "columns": [
249
+ {
250
+ "name": "studente",
251
+ "column_type": "character varying",
252
+ "numeric_precision": null,
253
+ "numeric_scale": null,
254
+ "is_nullable": false,
255
+ "fk_schema": "unicorsi",
256
+ "fk_table": "studenti",
257
+ "fk_column": "matricola"
258
+ },
259
+ {
260
+ "name": "corso",
261
+ "column_type": "character",
262
+ "numeric_precision": null,
263
+ "numeric_scale": null,
264
+ "is_nullable": false,
265
+ "fk_schema": "unicorsi",
266
+ "fk_table": "corsi",
267
+ "fk_column": "id"
268
+ },
269
+ {
270
+ "name": "data",
271
+ "column_type": "date",
272
+ "numeric_precision": null,
273
+ "numeric_scale": null,
274
+ "is_nullable": false,
275
+ "fk_schema": null,
276
+ "fk_table": null,
277
+ "fk_column": null
278
+ },
279
+ {
280
+ "name": "voto",
281
+ "column_type": "numeric",
282
+ "numeric_precision": 2,
283
+ "numeric_scale": 0,
284
+ "is_nullable": false,
285
+ "fk_schema": null,
286
+ "fk_table": null,
287
+ "fk_column": null
288
+ }
289
+ ]
290
+ },
291
+ "pianidistudio": {
292
+ "name": "pianidistudio",
293
+ "unique_constraints": [
294
+ {
295
+ "columns": [
296
+ {
297
+ "name": "studente",
298
+ "table_idx": null
299
+ },
300
+ {
301
+ "name": "anno",
302
+ "table_idx": null
303
+ },
304
+ {
305
+ "name": "annoaccademico",
306
+ "table_idx": null
307
+ }
308
+ ],
309
+ "is_pk": true
310
+ }
311
+ ],
312
+ "columns": [
313
+ {
314
+ "name": "studente",
315
+ "column_type": "character varying",
316
+ "numeric_precision": null,
317
+ "numeric_scale": null,
318
+ "is_nullable": false,
319
+ "fk_schema": "unicorsi",
320
+ "fk_table": "studenti",
321
+ "fk_column": "matricola"
322
+ },
323
+ {
324
+ "name": "anno",
325
+ "column_type": "numeric",
326
+ "numeric_precision": 1,
327
+ "numeric_scale": 0,
328
+ "is_nullable": false,
329
+ "fk_schema": null,
330
+ "fk_table": null,
331
+ "fk_column": null
332
+ },
333
+ {
334
+ "name": "annoaccademico",
335
+ "column_type": "integer",
336
+ "numeric_precision": 32,
337
+ "numeric_scale": 0,
338
+ "is_nullable": false,
339
+ "fk_schema": null,
340
+ "fk_table": null,
341
+ "fk_column": null
342
+ }
343
+ ]
344
+ },
345
+ "corsidilaurea": {
346
+ "name": "corsidilaurea",
347
+ "unique_constraints": [
348
+ {
349
+ "columns": [
350
+ {
351
+ "name": "denominazione",
352
+ "table_idx": null
353
+ },
354
+ {
355
+ "name": "facolta",
356
+ "table_idx": null
357
+ }
358
+ ],
359
+ "is_pk": false
360
+ },
361
+ {
362
+ "columns": [
363
+ {
364
+ "name": "id",
365
+ "table_idx": null
366
+ }
367
+ ],
368
+ "is_pk": true
369
+ }
370
+ ],
371
+ "columns": [
372
+ {
373
+ "name": "facolta",
374
+ "column_type": "character varying",
375
+ "numeric_precision": null,
376
+ "numeric_scale": null,
377
+ "is_nullable": false,
378
+ "fk_schema": null,
379
+ "fk_table": null,
380
+ "fk_column": null
381
+ },
382
+ {
383
+ "name": "attivazione",
384
+ "column_type": "character",
385
+ "numeric_precision": null,
386
+ "numeric_scale": null,
387
+ "is_nullable": false,
388
+ "fk_schema": null,
389
+ "fk_table": null,
390
+ "fk_column": null
391
+ },
392
+ {
393
+ "name": "denominazione",
394
+ "column_type": "character varying",
395
+ "numeric_precision": null,
396
+ "numeric_scale": null,
397
+ "is_nullable": false,
398
+ "fk_schema": null,
399
+ "fk_table": null,
400
+ "fk_column": null
401
+ },
402
+ {
403
+ "name": "id",
404
+ "column_type": "numeric",
405
+ "numeric_precision": 3,
406
+ "numeric_scale": 0,
407
+ "is_nullable": false,
408
+ "fk_schema": null,
409
+ "fk_table": null,
410
+ "fk_column": null
411
+ }
412
+ ]
413
+ },
414
+ "professori": {
415
+ "name": "professori",
416
+ "unique_constraints": [
417
+ {
418
+ "columns": [
419
+ {
420
+ "name": "id",
421
+ "table_idx": null
422
+ }
423
+ ],
424
+ "is_pk": true
425
+ }
426
+ ],
427
+ "columns": [
428
+ {
429
+ "name": "id",
430
+ "column_type": "numeric",
431
+ "numeric_precision": 5,
432
+ "numeric_scale": 0,
433
+ "is_nullable": false,
434
+ "fk_schema": null,
435
+ "fk_table": null,
436
+ "fk_column": null
437
+ },
438
+ {
439
+ "name": "stipendio",
440
+ "column_type": "numeric",
441
+ "numeric_precision": 8,
442
+ "numeric_scale": 2,
443
+ "is_nullable": false,
444
+ "fk_schema": null,
445
+ "fk_table": null,
446
+ "fk_column": null
447
+ },
448
+ {
449
+ "name": "cognome",
450
+ "column_type": "character varying",
451
+ "numeric_precision": null,
452
+ "numeric_scale": null,
453
+ "is_nullable": false,
454
+ "fk_schema": null,
455
+ "fk_table": null,
456
+ "fk_column": null
457
+ },
458
+ {
459
+ "name": "nome",
460
+ "column_type": "character varying",
461
+ "numeric_precision": null,
462
+ "numeric_scale": null,
463
+ "is_nullable": false,
464
+ "fk_schema": null,
465
+ "fk_table": null,
466
+ "fk_column": null
467
+ }
468
+ ]
469
+ }
470
+ }
471
+ }
472
+ }
473
+ }