Files
157 lines
6.1 KiB
Vue
157 lines
6.1 KiB
Vue
|
<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>
|