stuzer05 ревизій цього gist 2 years ago. До ревизії
1 file changed, 1 insertion
postgres.sql
| @@ -12,6 +12,7 @@ WITH models AS ( | |||
| 12 | 12 | WHEN 'ARRAY' THEN 'pgtype.Array[string]' | |
| 13 | 13 | WHEN 'date' THEN 'pgtype.Date' | |
| 14 | 14 | WHEN 'character varying' THEN 'string' | |
| 15 | + | WHEN 'double precision' THEN 'float64' | |
| 15 | 16 | -- add your own type converters as needed or it will default to 'string' | |
| 16 | 17 | ELSE 'UNKNOWN' | |
| 17 | 18 | END AS type_info, | |
stuzer05 ревизій цього gist 2 years ago. До ревизії
3 files changed, 126 insertions
mariadb.sql(файл створено)
| @@ -0,0 +1,49 @@ | |||
| 1 | + | SELECT | |
| 2 | + | 'type ' || table_name || ' struct {' || CHR(10) || fields || CHR(10) || '}' AS models | |
| 3 | + | FROM | |
| 4 | + | ( | |
| 5 | + | SELECT | |
| 6 | + | table_name, | |
| 7 | + | REPLACE(RTRIM(XMLAGG(XMLELEMENT(E, CHR(9) || column_name || CHR(9) || type_info || CHR(9) || annotation || CHR(10))).EXTRACT('//text()').GETCLOBVAL(), CHR(10)), '"', '"') AS fields | |
| 8 | + | FROM | |
| 9 | + | ( | |
| 10 | + | SELECT | |
| 11 | + | REPLACE(INITCAP(table_name), '_', '') AS table_name, | |
| 12 | + | REPLACE(INITCAP(column_name), '_', '') AS column_name, | |
| 13 | + | CASE data_type | |
| 14 | + | WHEN 'TIMESTAMP' THEN 'time.Time' | |
| 15 | + | WHEN 'TIMESTAMP(6)' THEN 'time.Time' | |
| 16 | + | WHEN 'TIMESTAMP WITH TIME ZONE' THEN 'time.Time' | |
| 17 | + | WHEN 'TIMESTAMP WITH LOCAL TIME ZONE' THEN 'time.Time' | |
| 18 | + | WHEN 'LONG' THEN 'int64' | |
| 19 | + | WHEN 'NUMBER' THEN | |
| 20 | + | CASE | |
| 21 | + | WHEN data_precision IS NULL AND data_scale = 0 THEN 'int' | |
| 22 | + | WHEN data_precision IS NOT NULL AND data_scale = 0 THEN 'int64' | |
| 23 | + | ELSE 'float64' | |
| 24 | + | END | |
| 25 | + | WHEN 'FLOAT' THEN 'float32' | |
| 26 | + | WHEN 'BINARY_FLOAT' THEN 'float32' | |
| 27 | + | WHEN 'BINARY_DOUBLE' THEN 'float64' | |
| 28 | + | WHEN 'CHAR' THEN 'string' | |
| 29 | + | WHEN 'VARCHAR2' THEN 'sql.NullString' | |
| 30 | + | WHEN 'NCHAR' THEN 'string' | |
| 31 | + | WHEN 'NVARCHAR2' THEN 'string' | |
| 32 | + | WHEN 'CLOB' THEN 'go_ora.Clob' | |
| 33 | + | WHEN 'NCLOB' THEN 'go_ora.Nlob' | |
| 34 | + | WHEN 'BLOB' THEN 'go_ora.Blob' | |
| 35 | + | WHEN 'DATE' THEN 'go_ora.NullTimeStamp' | |
| 36 | + | WHEN 'RAW' THEN '[]byte' | |
| 37 | + | WHEN 'UNDEFINED' THEN 'database.OraUNDEFINED' | |
| 38 | + | -- add your own type converters as needed or it will default to 'string' | |
| 39 | + | ELSE 'UNKNOWN' | |
| 40 | + | END AS type_info, | |
| 41 | + | '`json:"' || column_name || '" db:"' || column_name || '"`' AS annotation | |
| 42 | + | FROM all_tab_columns | |
| 43 | + | WHERE owner = 'DELOPRO' | |
| 44 | + | ) | |
| 45 | + | --WHERE type_info = 'UNKNOWN' | |
| 46 | + | GROUP BY table_name | |
| 47 | + | ) | |
| 48 | + | --WHERE table_name = 'V8EventVw' | |
| 49 | + | ORDER BY table_name | |
oracle.sql(файл створено)
| @@ -0,0 +1,49 @@ | |||
| 1 | + | SELECT | |
| 2 | + | 'type ' || table_name || ' struct {' || CHR(10) || fields || CHR(10) || '}' AS models | |
| 3 | + | FROM | |
| 4 | + | ( | |
| 5 | + | SELECT | |
| 6 | + | table_name, | |
| 7 | + | REPLACE(RTRIM(XMLAGG(XMLELEMENT(E, CHR(9) || column_name || CHR(9) || type_info || CHR(9) || annotation || CHR(10))).EXTRACT('//text()').GETCLOBVAL(), CHR(10)), '"', '"') AS fields | |
| 8 | + | FROM | |
| 9 | + | ( | |
| 10 | + | SELECT | |
| 11 | + | REPLACE(INITCAP(table_name), '_', '') AS table_name, | |
| 12 | + | REPLACE(INITCAP(column_name), '_', '') AS column_name, | |
| 13 | + | CASE data_type | |
| 14 | + | WHEN 'TIMESTAMP' THEN 'time.Time' | |
| 15 | + | WHEN 'TIMESTAMP(6)' THEN 'time.Time' | |
| 16 | + | WHEN 'TIMESTAMP WITH TIME ZONE' THEN 'time.Time' | |
| 17 | + | WHEN 'TIMESTAMP WITH LOCAL TIME ZONE' THEN 'time.Time' | |
| 18 | + | WHEN 'LONG' THEN 'int64' | |
| 19 | + | WHEN 'NUMBER' THEN | |
| 20 | + | CASE | |
| 21 | + | WHEN data_precision IS NULL AND data_scale = 0 THEN 'int' | |
| 22 | + | WHEN data_precision IS NOT NULL AND data_scale = 0 THEN 'int64' | |
| 23 | + | ELSE 'float64' | |
| 24 | + | END | |
| 25 | + | WHEN 'FLOAT' THEN 'float32' | |
| 26 | + | WHEN 'BINARY_FLOAT' THEN 'float32' | |
| 27 | + | WHEN 'BINARY_DOUBLE' THEN 'float64' | |
| 28 | + | WHEN 'CHAR' THEN 'string' | |
| 29 | + | WHEN 'VARCHAR2' THEN 'sql.NullString' | |
| 30 | + | WHEN 'NCHAR' THEN 'string' | |
| 31 | + | WHEN 'NVARCHAR2' THEN 'string' | |
| 32 | + | WHEN 'CLOB' THEN 'go_ora.Clob' | |
| 33 | + | WHEN 'NCLOB' THEN 'go_ora.Nlob' | |
| 34 | + | WHEN 'BLOB' THEN 'go_ora.Blob' | |
| 35 | + | WHEN 'DATE' THEN 'go_ora.NullTimeStamp' | |
| 36 | + | WHEN 'RAW' THEN '[]byte' | |
| 37 | + | WHEN 'UNDEFINED' THEN 'database.OraUNDEFINED' | |
| 38 | + | -- add your own type converters as needed or it will default to 'string' | |
| 39 | + | ELSE 'UNKNOWN' | |
| 40 | + | END AS type_info, | |
| 41 | + | '`json:"' || column_name || '" db:"' || column_name || '"`' AS annotation | |
| 42 | + | FROM all_tab_columns | |
| 43 | + | WHERE owner = 'DELOPRO' | |
| 44 | + | ) | |
| 45 | + | --WHERE type_info = 'UNKNOWN' | |
| 46 | + | GROUP BY table_name | |
| 47 | + | ) | |
| 48 | + | --WHERE table_name = 'V8EventVw' | |
| 49 | + | ORDER BY table_name | |
postgres.sql(файл створено)
| @@ -0,0 +1,28 @@ | |||
| 1 | + | WITH models AS ( | |
| 2 | + | WITH data AS ( | |
| 3 | + | SELECT | |
| 4 | + | replace(initcap(table_name::text), '_', '') table_name, | |
| 5 | + | replace(initcap(column_name::text), '_', '') column_name, | |
| 6 | + | CASE data_type | |
| 7 | + | WHEN 'timestamp without time zone' THEN 'time.Time' | |
| 8 | + | WHEN 'timestamp with time zone' THEN 'time.Time' | |
| 9 | + | WHEN 'boolean' THEN 'bool' | |
| 10 | + | WHEN 'bigint' THEN 'int64' | |
| 11 | + | WHEN 'integer' THEN 'int' | |
| 12 | + | WHEN 'ARRAY' THEN 'pgtype.Array[string]' | |
| 13 | + | WHEN 'date' THEN 'pgtype.Date' | |
| 14 | + | WHEN 'character varying' THEN 'string' | |
| 15 | + | -- add your own type converters as needed or it will default to 'string' | |
| 16 | + | ELSE 'UNKNOWN' | |
| 17 | + | END AS type_info, | |
| 18 | + | '`json:"' || column_name ||'"`' AS annotation | |
| 19 | + | FROM information_schema.columns | |
| 20 | + | WHERE table_schema IN ('public') | |
| 21 | + | ORDER BY table_schema, table_name, ordinal_position | |
| 22 | + | ) | |
| 23 | + | SELECT table_name, STRING_AGG(E'\t' || column_name || E'\t' || type_info || E'\t' || annotation, E'\n') fields | |
| 24 | + | FROM data | |
| 25 | + | GROUP BY table_name | |
| 26 | + | ) | |
| 27 | + | SELECT 'type ' || table_name || E' struct {\n' || fields || E'\n}' models | |
| 28 | + | FROM models ORDER BY table_name | |