Skip to content

Commit 1e079ba

Browse files
committed
opt code
1 parent e04fda0 commit 1e079ba

3 files changed

Lines changed: 94 additions & 1 deletion

File tree

src/App.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<el-tab-pane label="链接" name="link"><Link /></el-tab-pane>
2222
<el-tab-pane label="模拟请求" v-if="isFull" name="sim"><Sim /></el-tab-pane>
2323
<el-tab-pane label="JsonToGo" name="jsonToGo"><JsonToGo /></el-tab-pane>
24+
<el-tab-pane label="SqlToModel" name="sqlToModel"><SqlToModel /></el-tab-pane>
2425
<el-tab-pane label="HtmlShow" name="HtmlShow"><HtmlShow /></el-tab-pane>
2526
<el-tab-pane label="Iptv Checker" v-if="isFull" name="Iptv"><Iptv /></el-tab-pane>
2627
</el-tabs>
@@ -37,12 +38,13 @@ import JsonToGo from './components/JsonToGo.vue';
3738
import HtmlShow from './components/Html.vue';
3839
import Link from './components/Link.vue';
3940
import Iptv from './components/Iptv.vue';
41+
import SqlToModel from './components/SqlToModel.vue';
4042
4143
export default {
4244
name: 'app',
4345
data() {
4446
return {
45-
nowType: 'normal',
47+
nowType: 'sqlToModel',
4648
isFull: false,
4749
};
4850
},
@@ -62,6 +64,7 @@ export default {
6264
HtmlShow,
6365
Link,
6466
Iptv,
67+
SqlToModel,
6568
},
6669
};
6770
</script>

src/components/SqlToModel.vue

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<template>
2+
<div class="json-container">
3+
<div class="json-text">
4+
<el-input type="textarea" rows=2 placeholder="请输入sql创建语句"
5+
@change="inputJson" v-model="jsonText">
6+
</el-input>
7+
</div>
8+
<div class="show-go" v-if="goStruct !== ''">
9+
<el-input type="textarea" rows=8 placeholder="显示的GoStruct" v-model="goStruct"></el-input>
10+
</div>
11+
</div>
12+
</template>
13+
14+
<script>
15+
import { sqlStrToGoTemplate } from '../utils/go/common';
16+
17+
export default {
18+
data() {
19+
return {
20+
jsonText: '',
21+
goStruct: '',
22+
};
23+
},
24+
methods: {
25+
inputJson() {
26+
sqlStrToGoTemplate(this.jsonText);
27+
},
28+
},
29+
};
30+
</script>
31+
32+
<style lang="css" scoped>
33+
.json-container {
34+
display: flex;
35+
flex-direction: column;
36+
}
37+
.show-go {
38+
padding-top: 10px;
39+
}
40+
</style>

src/utils/go/common.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
function sqlStrToGoTemplate(str) {
2+
// CREATE TABLE `(.*)`\s\(([\d\D]*)\)\sENGINE=(.*)\sAUTO_INCREMENT=(\d+)\s(\w+)\sCHARSET=(\w+)\s(COLLATE=\w+)*
3+
const regex = /CREATE TABLE `(.*)`\s\(([\d\D]*)\)\sENGINE=(.*)\sAUTO_INCREMENT=(\d+)\s(\w+)\sCHARSET=(\w+)\s(COLLATE=\w+)*/gm;
4+
// `(.*)`\s(\w+[\((\d+)\)]*[\sunsigned\s]*)([NOT\s[NULL\s]*]*)(DEFAULT\s([\'](.*?)[\']|NULL)\s)*(AUTO_INCREMENT\s)*(COMMENT\s[\'](.*)[\'])*
5+
// const columnRegex = /`(.*)`\s(\w+[\((\d+)\)]*[\sunsigned\s]*)([NOT\s[NULL\s]*]*)(DEFAULT\s([\'](.*?)[\']|NULL)\s)*(AUTO_INCREMENT\s)*(COMMENT\s[\'](.*)[\'])*/gm;
6+
let m;
7+
const data = {};
8+
while ((m = regex.exec(str)) !== null) {
9+
// This is necessary to avoid infinite loops with zero-width matches
10+
if (m.index === regex.lastIndex) {
11+
regex.lastIndex++;
12+
}
13+
14+
// The result can be accessed through the `m`-variable.
15+
m.forEach((match, groupIndex) => {
16+
data[groupIndex] = match;
17+
});
18+
}
19+
return sqlStrColumnToEachColumn(data);
20+
}
21+
22+
function sqlStrColumnToEachColumn(data) {
23+
const regex = /`(.*)`\s(\w+[\((\d+)\)]*[\sunsigned\s]*)([NOT\s[NULL\s]*]*)(DEFAULT\s([\'](.*?)[\']|NULL)\s)*(AUTO_INCREMENT\s)*(COMMENT\s[\'](.*)[\'])*/gm;
24+
console.log(data);
25+
const tableName = data[1];
26+
const str = data[2];
27+
const engine = data[3];
28+
const incrasement = data[4];
29+
const dafaultCharset = data[6];
30+
const columns = [];
31+
let m;
32+
while ((m = regex.exec(str)) !== null) {
33+
// This is necessary to avoid infinite loops with zero-width matches
34+
if (m.index === regex.lastIndex) {
35+
regex.lastIndex++;
36+
}
37+
const one = {};
38+
// The result can be accessed through the `m`-variable.
39+
m.forEach((match, groupIndex, arr) => {
40+
one[groupIndex] = match;
41+
});
42+
columns.push(one);
43+
}
44+
console.log(columns);
45+
}
46+
47+
export {
48+
sqlStrToGoTemplate,
49+
sqlStrColumnToEachColumn,
50+
};

0 commit comments

Comments
 (0)