Refactor views structure
This commit is contained in:
150
src/views/go/SQLTablesToStruct.vue
Normal file
150
src/views/go/SQLTablesToStruct.vue
Normal file
@ -0,0 +1,150 @@
|
||||
<template>
|
||||
<h2 class="tool-title">SQL tables Go struct</h2>
|
||||
<hr class="mt-5 mb-5">
|
||||
|
||||
<div class="input-group">
|
||||
<label for="result">MariaDB</label>
|
||||
<MonacoEditor name="dialects_mariadb" language="sql" :value="toolData.dialects.mariadb" readonly="true"
|
||||
style="height: 500px"></MonacoEditor>
|
||||
</div>
|
||||
|
||||
<hr class="mt-5 mb-5">
|
||||
|
||||
<div class="input-group">
|
||||
<label for="result">PostgreSQL</label>
|
||||
<MonacoEditor name="dialects_postgresql" language="sql" :value="toolData.dialects.postgresql" readonly="true"
|
||||
style="height: 500px"></MonacoEditor>
|
||||
</div>
|
||||
|
||||
<hr class="mt-5 mb-5">
|
||||
|
||||
<div class="input-group">
|
||||
<label for="result">OracleSQL</label>
|
||||
<MonacoEditor name="dialects_oraclesql" language="sql" :value="toolData.dialects.oraclesql" readonly="true"
|
||||
style="height: 500px"></MonacoEditor>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import MonacoEditor from "@/components/MonacoEditor.vue";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
MonacoEditor
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
toolData: {
|
||||
dialects: {
|
||||
mariadb: `WITH models AS (WITH data AS (SELECT REPLACE(CONCAT(UPPER(SUBSTRING(table_name, 1, 1)),
|
||||
LOWER(SUBSTRING(table_name, 2))), '_',
|
||||
'') AS table_name,
|
||||
REPLACE(CONCAT(UPPER(SUBSTRING(column_name, 1, 1)),
|
||||
LOWER(SUBSTRING(column_name, 2))), '_',
|
||||
'') AS column_name,
|
||||
CASE data_type
|
||||
WHEN 'timestamp' THEN 'time.Time'
|
||||
WHEN 'tinyint(1)' THEN 'bool'
|
||||
WHEN 'bigint' THEN 'int64'
|
||||
WHEN 'int' THEN 'int'
|
||||
WHEN 'tinyint' THEN 'int8'
|
||||
WHEN 'double' THEN 'float64'
|
||||
WHEN 'decimal' THEN 'float32'
|
||||
WHEN 'date' THEN 'time.Time'
|
||||
WHEN 'char' THEN 'string'
|
||||
WHEN 'varchar' THEN 'string'
|
||||
WHEN 'text' THEN 'string'
|
||||
WHEN 'mediumtext' THEN 'string'
|
||||
WHEN 'longtext' THEN 'string'
|
||||
WHEN 'enum' THEN 'string'
|
||||
-- add your own type converters as needed or it will default to 'string'
|
||||
ELSE CONCAT("UNKNOWN_", data_type)
|
||||
END AS type_info,
|
||||
CONCAT('\`json:"', column_name, '"\`') AS annotation
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema IN ('work-euroline.local')
|
||||
ORDER BY table_schema, table_name, ordinal_position)
|
||||
SELECT table_name,
|
||||
GROUP_CONCAT(CONCAT('\\t', column_name, '\\t', type_info, '\\t', annotation) SEPARATOR '\\n') AS fields
|
||||
FROM data
|
||||
GROUP BY table_name)
|
||||
SELECT CONCAT('type ', table_name, ' struct {\\n', fields, '\\n}') AS models
|
||||
FROM models
|
||||
ORDER BY table_name`,
|
||||
postgresql: `WITH models AS (WITH data AS (SELECT replace(initcap(table_name::text), '_', '') table_name,
|
||||
replace(initcap(column_name::text), '_', '') column_name,
|
||||
CASE data_type
|
||||
WHEN 'timestamp without time zone' THEN 'time.Time'
|
||||
WHEN 'timestamp with time zone' THEN 'time.Time'
|
||||
WHEN 'boolean' THEN 'bool'
|
||||
WHEN 'bigint' THEN 'int64'
|
||||
WHEN 'integer' THEN 'int'
|
||||
WHEN 'ARRAY' THEN 'pgtype.Array[string]'
|
||||
WHEN 'date' THEN 'pgtype.Date'
|
||||
WHEN 'character varying' THEN 'string'
|
||||
-- add your own type converters as needed or it will default to 'string'
|
||||
ELSE 'UNKNOWN'
|
||||
END AS type_info,
|
||||
'\`json:"' || column_name || '"\`' AS annotation
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema IN ('public')
|
||||
ORDER BY table_schema, table_name, ordinal_position)
|
||||
SELECT table_name, STRING_AGG(E'\\t' || column_name || E'\\t' || type_info || E'\\t' || annotation, E '\\n') fields
|
||||
FROM data
|
||||
GROUP BY table_name)
|
||||
SELECT 'type ' || table_name || E ' struct {\\n' || fields || E'\\n}' models
|
||||
FROM models
|
||||
ORDER BY table_name`,
|
||||
oraclesql: `SELECT 'type ' || table_name || ' struct {' || CHR(10) || fields || CHR(10) || '}' AS models
|
||||
FROM (SELECT table_name,
|
||||
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
|
||||
FROM (SELECT REPLACE(INITCAP(table_name), '_', '') AS table_name,
|
||||
REPLACE(INITCAP(column_name), '_', '') AS column_name,
|
||||
CASE data_type
|
||||
WHEN 'TIMESTAMP' THEN 'time.Time'
|
||||
WHEN 'TIMESTAMP(6)' THEN 'time.Time'
|
||||
WHEN 'TIMESTAMP WITH TIME ZONE' THEN 'time.Time'
|
||||
WHEN 'TIMESTAMP WITH LOCAL TIME ZONE' THEN 'time.Time'
|
||||
WHEN 'LONG' THEN 'int64'
|
||||
WHEN 'NUMBER' THEN
|
||||
CASE
|
||||
WHEN data_precision IS NULL AND data_scale = 0 THEN 'int'
|
||||
WHEN data_precision IS NOT NULL AND data_scale = 0 THEN 'int64'
|
||||
ELSE 'float64'
|
||||
END
|
||||
WHEN 'FLOAT' THEN 'float32'
|
||||
WHEN 'BINARY_FLOAT' THEN 'float32'
|
||||
WHEN 'BINARY_DOUBLE' THEN 'float64'
|
||||
WHEN 'CHAR' THEN 'string'
|
||||
WHEN 'VARCHAR2' THEN 'sql.NullString'
|
||||
WHEN 'NCHAR' THEN 'string'
|
||||
WHEN 'NVARCHAR2' THEN 'string'
|
||||
WHEN 'CLOB' THEN 'go_ora.Clob'
|
||||
WHEN 'NCLOB' THEN 'go_ora.Nlob'
|
||||
WHEN 'BLOB' THEN 'go_ora.Blob'
|
||||
WHEN 'DATE' THEN 'go_ora.NullTimeStamp'
|
||||
WHEN 'RAW' THEN '[]byte'
|
||||
WHEN 'UNDEFINED' THEN 'database.OraUNDEFINED'
|
||||
-- add your own type converters as needed or it will default to 'string'
|
||||
ELSE 'UNKNOWN'
|
||||
END AS type_info,
|
||||
'\`json:"' || column_name || '" db:"' || column_name || '"\`' AS annotation
|
||||
FROM all_tab_columns
|
||||
WHERE owner = 'DELOPRO')
|
||||
--WHERE type_info = 'UNKNOWN'
|
||||
GROUP BY table_name)
|
||||
--WHERE table_name = 'V8EventVw'
|
||||
ORDER BY table_name`
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
|
||||
</style>
|
Reference in New Issue
Block a user