20240220更新

master
RENCHAO 7 months ago
parent 34300f8cde
commit 9b2733c0e9

@ -158,7 +158,6 @@ public class Test01 {
/** /**
* csv * csv
* StringJoiner * StringJoiner
*
*/ */
@Test @Test
public void test08() throws IOException { public void test08() throws IOException {
@ -207,7 +206,6 @@ public class Test01 {
} }
/** /**
* liststream * liststream
*/ */
@ -243,7 +241,6 @@ public class Test01 {
/** /**
* *
*
*/ */
@Test @Test
public void test15() throws IOException { public void test15() throws IOException {
@ -293,7 +290,6 @@ public class Test01 {
/** /**
* *
*
*/ */
private void compression(File file) throws IOException { private void compression(File file) throws IOException {
FileOutputStream outputStream = new FileOutputStream(file.toString().replace("csv", "zip")); FileOutputStream outputStream = new FileOutputStream(file.toString().replace("csv", "zip"));
@ -314,7 +310,6 @@ public class Test01 {
/** /**
* *
*
*/ */
private void getFileList(File dir, List<File> fileList) { private void getFileList(File dir, List<File> fileList) {
if (!dir.exists()) { if (!dir.exists()) {
@ -336,235 +331,113 @@ public class Test01 {
@Test @Test
public void test16() { public void test16() {
List<Integer> intList = new ArrayList<>();
int n = 100000000;
for (int i = 0; i < n; i++) {
intList.add((int) (Math.random() * 10));
}
int aa = 0; // System.out.println(isMatch("abcdef", "a*ef"));
long l1 = System.currentTimeMillis(); // System.out.println(isMatch("abcdefghi", "a*ef*i"));
for (Integer integer : intList) { // System.out.println(isMatch("abcdefghi", ".*"));
aa += (integer * 10); System.out.println(isMatch("aa", "a"));
} System.out.println(isMatch("aa", "a*b*"));
System.out.println(aa + "::耗时1" + (System.currentTimeMillis() - l1)); System.out.println(isMatch("aab", "c*a*b"));
System.out.println(isMatch("aab", ".*"));
System.out.println(isMatch("abcde", ".*de"));
aa = 0; // System.out.println("abcd".substring(1));
long l2 = System.currentTimeMillis();
for (Integer integer : intList) {
aa += x10(integer);
}
System.out.println(aa + "::耗时2" + (System.currentTimeMillis() - l2));
aa = 0;
long l3 = System.currentTimeMillis();
for (Integer integer : intList) {
aa += x102(integer);
} }
System.out.println(aa + "::耗时3" + (System.currentTimeMillis() - l3));
public boolean isMatch(String s, String p) {
if (p.length() == 0 && s.length() != 0) {
return false;
} }
if (s.length() == 0) {
private int x10(int a) { if (p.length() == 0) {
int c = a; return true;
for (int i = 0; i < 9; i++) {
c += a;
} }
return c; if (p.length() == 1) {
return false;
} }
if (p.charAt(1) == '*') {
private int x102(int a) { return isMatch(s, p.substring(2));
int c = a;
for (int i = 0; i < 3; i++) {
c = c << 1;
} }
c = (a << 1) + c; return false;
return c;
} }
if (p.charAt(0) == '.') {
@Test if (p.length() == 1 || ) {
public void test17() { return isMatch(s.substring(1), p.substring(1));
// List<Integer> intList = new ArrayList<>();
// int n = 10000000;
// for (int i = 0; i < n; i++) {
// intList.add((int) (Math.random() * 10));
// }
// long l1 = System.currentTimeMillis();
// for (Integer integer : intList) {
// reverse(integer);
// }
// System.out.println("::耗时1" + (System.currentTimeMillis() - l1));
//
// long l2 = System.currentTimeMillis();
// for (Integer integer : intList) {
// reverse2(integer);
// }
// System.out.println("::耗时2" + (System.currentTimeMillis() - l2));
//
// long l3 = System.currentTimeMillis();
// for (Integer integer : intList) {
// reverse3(integer);
// }
// System.out.println("::耗时3" + (System.currentTimeMillis() - l3));
//
// long l4 = System.currentTimeMillis();
// for (Integer integer : intList) {
// reverse4(integer);
// }
// System.out.println("::耗时4" + (System.currentTimeMillis() - l4));
//
// long l5 = System.currentTimeMillis();
// for (Integer integer : intList) {
// reverse5(integer);
// }
// System.out.println("::耗时5" + (System.currentTimeMillis() - l5));
int i = -2147483648;
System.out.println(reverse2(i));
System.out.println(reverse3(i));
System.out.println(reverse4(i));
System.out.println(Integer.MAX_VALUE);
}
public int reverse(int x) {
int b = x >>> 31;
int bit = 0;
int k = 0;
while (x != 0) {
if (bit == 9 && k / 100000000 > 2) {
return 0;
}
bit++;
k = k * 10 + x % 10;
x = x / 10;
}
if (b != k >>> 31) {
k = 0;
}
return k;
}
public int reverse2(int x) {
int b = x >>> 31;
int k = 0;
while (x != 0) {
int a = k;
for (int i = 0; i < 3; i++) {
a = a << 1;
if (b != a >>> 31) {
return 0;
}
}
a = (k << 1) + a;
if (b != a >>> 31) {
return 0;
}
k = a + x % 10;
x = x / 10;
}
return k;
}
public int reverse3(int x) {
int b = x >>> 31;
int k = x % 10;
x = x / 10;
while (x != 0) {
int a = k;
for (int i = 0; i < 4; i++) {
if (i < 3) {
a = a << 1;
} else {
a = (k << 1) + a;
}
if (b != a >>> 31) {
return 0;
}
}
k = a + x % 10;
if (b != k >>> 31) {
return 0;
} }
x = x / 10; if ()
}
return k;
} }
public int reverse4(int x) {
int b = x >>> 31; if (s.charAt(0) != p.charAt(0)) {
int k = x % 10; if (p.length() < 2 || p.charAt(1) != '*') {
x = x / 10; return false;
while (x != 0) {
if (k > -1000000000 && k < 1000000000) {
k = k * 10 + x % 10;
} else {
int a = k;
for (int i = 0; i < 4; i++) {
if (i < 3) {
a = a << 1;
} else {
a = (k << 1) + a;
}
if (b != a >>> 31) {
return 0;
} }
if (p.charAt(1) == '*') {
return isMatch(s, p.substring(2));
} }
k = a + x % 10;
if (b != k >>> 31) {
return 0;
} }
if (s.charAt(0) == p.charAt(0)) {
if (p.length() == 1 || p.charAt(1) != '*') {
return isMatch(s.substring(1), p.substring(1));
} }
x = x / 10; return isMatch(s.substring(1), p);
} }
return k; return false;
} }
public int reverse41(int x) { public boolean isMatch3(String s, String p) {
int sign = x >>> 31; int sIndex = 0;
int result = x % 10; int pIndex = 0;
x = x / 10; int tem = -1;
while (x != 0) { while (sIndex < s.length() && pIndex < p.length()) {
if (result > -100000000 && result < 100000000) { char c1 = s.charAt(sIndex++);
result = result * 10 + x % 10; char c2 = p.charAt(pIndex);
} else { if (c1 == c2 || c2 == '.') {
int tem = result; pIndex++;
for (int i = 0; i < 4; i++) { continue;
if (i < 3) {
tem = tem << 1;
} else {
tem = (result << 1) + tem;
} }
if (sign != tem >>> 31) { if (c2 == '*') {
return 0; tem = pIndex++;
} }
if (tem == p.length() - 1) {
sIndex = s.length();
break;
} }
result = tem + x % 10; if (pIndex < p.length() && (c1 == p.charAt(pIndex) || '.' == p.charAt(pIndex))) {
if (sign != result >>> 31) { pIndex++;
return 0; } else if (tem != -1) {
pIndex = tem;
} }
if (tem != -1 && pIndex == p.length() && sIndex < s.length()) {
pIndex = tem;
} }
x = x / 10;
} }
return result; return pIndex == p.length() && sIndex == s.length();
} }
public int reverse5(int x) {
int result = 0; public boolean isMatch2(String s, String p) {
while (x != 0) { int pIndex = 0;
int m = x % 10; for (int i = 0; i < s.length(); i++) {
x = x / 10; if (pIndex >= p.length()) {
int n = result * 10; return false;
if (n / 10 != result) { }
return 0; char c1 = s.charAt(i);
char c2 = p.charAt(pIndex);
if (c1 == c2 || c2 == '.') {
pIndex++;
} else if (c2 == '*') {
} else {
return false;
} }
int var = n + m;
result = var;
} }
return result; return true;
} }

@ -9,8 +9,9 @@
var codeRuleStr="((\"[\u4E00-\u9FA50-9a-z _]+\")|(\\[[\u4E00-\u9FA50-9a-z _]+\\])|(`[\u4E00-\u9FA50-9a-z _]+`)|([a-z]+[0-9]*(_[a-z]+[0-9]*)*))"; var codeRuleStr="((\"[\u4E00-\u9FA50-9a-z _]+\")|(\\[[\u4E00-\u9FA50-9a-z _]+\\])|(`[\u4E00-\u9FA50-9a-z _]+`)|([a-z]+[0-9]*(_[a-z]+[0-9]*)*))";
var codeRuleStr2="((\"[\u4E00-\u9FA50-9a-z _]+\")|(\\[[\u4E00-\u9FA50-9a-z _]+\\])|(`[\u4E00-\u9FA50-9a-z _]+`)|([a-z]+[0-9]*(_[a-z]+[0-9]*)*))"; var codeRuleStr2="((\"[\u4E00-\u9FA50-9a-z _]+\")|(\\[[\u4E00-\u9FA50-9a-z _]+\\])|(`[\u4E00-\u9FA50-9a-z _]+`)|([a-z]+[0-9]*(_[a-z]+[0-9]*)*))";
var bracketRuleStr="^(\"|`|\\[)"; var bracketRuleStr="^(\"|`|\\[)";
var tableRuleStr="\"%s\"|\\[%s\\]|`%s`|\\b%s"; var bracketRuleClear= new RegExp("[\"`\\[\\]]+","g");
var schemaTableRuleStr="\"%x\".\"%s\"|\\[%x\\].\\[%s\\]|`%x`.`%s`|%x.%s"; var tableRuleStr="\"%s\"|\\[%s\\]|`%s`|\\b%s\\b";
var schemaTableRuleStr= "\"\\w+\".\"%s\"|\\[\\w+\\].\\[%s\\]|`\\w+`.`%s`|\\b\\w+.%s\\b";
var alisaTempKey="ALISAALISAALISA"; var alisaTempKey="ALISAALISAALISA";
var showPath=true; var showPath=true;
var likeMatch=true; var likeMatch=true;
@ -265,6 +266,7 @@ function markCharOrder(search, word) {
if(!text){ if(!text){
return; return;
} }
text=text.replace(new RegExp("\\b(INSERT INTO|CREATE TABLE)\\b.*?\\)( |AS)*(?=\\bSELECT\\b)", "i")," ");
inputAlias = inputAlias.toLowerCase(); inputAlias = inputAlias.toLowerCase();
var groupdata = getNestingDepth(currTableCodes,text, currKey); var groupdata = getNestingDepth(currTableCodes,text, currKey);
if(!groupdata){ if(!groupdata){
@ -337,7 +339,8 @@ function markCharOrder(search, word) {
var fields = c.fields.match(new RegExp("(("+alisalist.join("|")+")\\."+codeRuleStr+" (AS| +) "+codeRuleStr2+" *(,|$))"+ var fields = c.fields.match(new RegExp("(("+alisalist.join("|")+")\\."+codeRuleStr+" (AS| +) "+codeRuleStr2+" *(,|$))"+
"|(("+alisalist.join("|")+")\\."+codeRuleStr+"[^,]+ (AS| ) "+codeRuleStr2+" *(,|$))"+ "|(("+alisalist.join("|")+")\\."+codeRuleStr+"[^,]+ (AS| ) "+codeRuleStr2+" *(,|$))"+
"|([^,]*\\(.*?\\).*?(AS| +) "+codeRuleStr2+" *(,|$))"+ "|([^,]*\\(.*?\\).*?(AS| +) "+codeRuleStr2+" *(,|$))"+
"|(("+alisalist.join("|")+")\\.\\* *(,|$))|(("+alisalist.join("|")+")\\."+codeRuleStr+" *(,|$))","ig")); "|(("+alisalist.join("|")+")\\.\\* *(,|$))|(("+alisalist.join("|")+")\\."+codeRuleStr+" *(,|$))" +
"|((?<!\\.)('\\d+'|\\d+) (AS| +) " + codeRuleStr2 + " *(,|$))", "ig"));
if(fields && fields.length>0){ if(fields && fields.length>0){
for (var j = 0; j < fields.length; j++) { for (var j = 0; j < fields.length; j++) {
var fstr = fields[j]; var fstr = fields[j];
@ -457,7 +460,7 @@ function markCharOrder(search, word) {
if(keys.length>0){ if(keys.length>0){
tables[inputAlias].push(displayHandler(fm[fm.length-1],descs.join("+"),keys.join("+"))); tables[inputAlias].push(displayHandler(fm[fm.length-1],descs.join("+"),keys.join("+")));
}else{ }else{
tables[inputAlias].push(displayHandler(fm[fm.length-1],null,factcode)); tables[inputAlias].push(displayHandler(fm[fm.length-1],null,null));
} }
} }
} }
@ -615,7 +618,7 @@ function markCharOrder(search, word) {
if(!text1){ if(!text1){
return ""; return "";
} }
text1 = text1.replace(/'.*?'/ig,"' '").replace(/(\\n|\n|\\t|\t)/g," ") text1 = clearContextValue(text1).replace(/(\\n|\n|\\t|\t)/g," ")
.replace(/ +/g," ").replace(regxSemicolon,""); .replace(/ +/g," ").replace(regxSemicolon,"");
text1 = clearContentComment(text1,true); text1 = clearContentComment(text1,true);
return text1; return text1;
@ -624,7 +627,7 @@ function markCharOrder(search, word) {
if(!text){ if(!text){
return ""; return "";
} }
text=text.replace(/'.*?'/ig,"' '").replace(/''/ig," "); text= clearContextValue(text).replace(/''/ig," ");
var lines = text.split('\n'); var lines = text.split('\n');
var text2=""; var text2="";
for (var i = 0; i < lines.length; i++) { for (var i = 0; i < lines.length; i++) {
@ -656,7 +659,7 @@ function markCharOrder(search, word) {
text2=text2+"\n"+linex; text2=text2+"\n"+linex;
} }
} }
text2 = text2.replace(/'.*?'/ig,"' '").replace(/(\\n|\n|\\t|\t)/g," ") text2 = text2.replace(/(\\n|\n|\\t|\t)/g," ")
.replace(/ +/g," "); .replace(/ +/g," ");
return text2; return text2;
} }
@ -685,7 +688,19 @@ function markCharOrder(search, word) {
} }
return text2; return text2;
} }
function clearContextValue(text1) {
if (!text1) {
return "";
}
text1 = text1.replace(/ +/g, " ").replace(new RegExp("'.*?'( AS\\b)*","ig"), (match) => {
if (/\bAS\b/i.test(match)) {
return match;
} else {
return "' '";
}
});
return text1;
}
function addTableList(tables,tablesList){ function addTableList(tables,tablesList){
if(!tablesList){ if(!tablesList){
return; return;
@ -1201,38 +1216,46 @@ export const sqlqueryUtils = {
tempSqlTables={}; tempSqlTables={};
if(startLineStr && startLineStr.length > 10){ if(startLineStr && startLineStr.length > 10){
currSelectQueryStr=startLineStr;
currInputAlias=inputAlias;
//console.log("currSelectQueryStr",currSelectQueryStr); //console.log("currSelectQueryStr",currSelectQueryStr);
for(var i=0,ln=alltablecodes.length;i<ln;i++){ for(var alli=0,allln=alltablecodes.length;alli<allln;alli++){
var t=alltablecodes[i].tableName; var key=alltablecodes[alli].tableName;
var t2=t; var tmp=key.split(".");
var tmp=t.split(".");
var regxstr1="";
if (tmp.length > 1) { if (tmp.length > 1) {
t2 = t.replace(".", "\\.") + "|" + "\\w+\\."+tmp[1] +"|"+tmp[1]; regxstr1 = regxstr1 + schemaTableRuleStr.replace(/%s/g, tmp[1])
+"|"+tableRuleStr.replace(/%s/g, tmp[1])
}else{
regxstr1 = regxstr1 + tableRuleStr.replace(/%s/g, key);
} }
var mresult=startLineStr.match(new RegExp("\\b(" + t2 + ")\\b", "ig")); regxstr1 = regxstr1.replace(/\./g, "\\.");
var mresult = startLineStr.match(new RegExp(regxstr1, "ig"));
if(!mresult){ if(!mresult){
continue; continue;
} }
var result=false; var result=false;
for (var mi = 0, mln = mresult.length; mi < mln; mi++) { for (var i = 0, ln = mresult.length; i < ln; i++) {
if(t.toLowerCase()===mresult[mi].toLowerCase() || tmp[1].toLowerCase()===mresult[mi].toLowerCase()){ var newcode = mresult[i].replace(bracketRuleClear,"");
startLineStr = startLineStr.replace(new RegExp(mresult[i],"g"), newcode);
if(key.toLowerCase()===newcode.toLowerCase() || (tmp.length > 1 && newcode.indexOf(".")===-1
&& tmp[1].toLowerCase()===newcode.toLowerCase())){
result=true; result=true;
break;
} }
} }
if(result){ if(result){
tempSqlTables[t] = []; tempSqlTables[key] = [];
currSelectTables.push(t); currSelectTables.push(key);
} }
if(currSelectTables.length>50){ if(currSelectTables.length>50){
//正常不应该有这么多表。也不建议所有sql放一起 //正常不应该有这么多表。也不建议所有sql放一起
break; break;
} }
} }
currSelectQueryStr=startLineStr;
currInputAlias=inputAlias;
} }
//console.log("currSelectQueryStr>>",currSelectQueryStr,currSelectTables);
}catch(e){ }catch(e){
console.log(e); console.log(e);
} }
@ -1268,23 +1291,18 @@ export const sqlqueryUtils = {
for (var i = 0, ln = currSelectTables.length; i < ln; i++) { for (var i = 0, ln = currSelectTables.length; i < ln; i++) {
regxstr1=(i==0?"":regxstr1+"|"); regxstr1=(i==0?"":regxstr1+"|");
if (currSelectTables[i].indexOf(".") > -1) { if (currSelectTables[i].indexOf(".") > -1) {
var ct=currSelectTables[i].split("."); regxstr1 = regxstr1 + currSelectTables[i] + "|(?<!.)" + currSelectTables[i].split(".")[1];
regxstr1 = regxstr1 + schemaTableRuleStr.replace(/%x/g, ct[0]).replace(/%s/g, ct[1])
+"|"+tableRuleStr.replace(/%s/g, ct[1])
}else{ }else{
regxstr1 = regxstr1 + tableRuleStr.replace(/%s/g, currSelectTables[i]); regxstr1 = regxstr1 +"(?<!.)"+ currSelectTables[i];
} }
} }
regxstr1=regxstr1.replace(/\./g,"\\."); regxstr1=regxstr1.replace(/\./g,"\\.");
var tableWithAliasRegs =new RegExp("(" + regxstr1 + ") +" + alisaRuleStr + "\\b|(" + regxstr1 + ")\\b", "ig"); var tableWithAliasRegs = new RegExp("\\b(" + regxstr1 + ")\\b +" + alisaRuleStr + "|\\b(" + regxstr1 + ")\\b", "ig");
var tableWithAlias = currSelectQueryStr.match(tableWithAliasRegs); var tableWithAlias = currSelectQueryStr.match(tableWithAliasRegs);
var handlerTableAlias = function(tableAliasMap,keywords,str){ var handlerTableAlias = function(tableAliasMap,keywords,str){
var t = str.split(" ");//table t1 var t = str.split(" ");//table t1
if(new RegExp(bracketRuleStr).test(t[0])){
t[0]=t[0].substring(1, t[0].length - 1);
}
var factkey = getArrayValue(currSelectTables,t[0]); var factkey = getArrayValue(currSelectTables,t[0]);
if(factkey){ if(factkey){
if(!tableAliasMap.hasOwnProperty(factkey)){ if(!tableAliasMap.hasOwnProperty(factkey)){

@ -84,7 +84,7 @@
:close-on-press-escape="false"> :close-on-press-escape="false">
<el-form ref="form" :disabled="disabled" :model="form" :rules="rules" label-width="120px"> <el-form ref="form" :disabled="disabled" :model="form" :rules="rules" label-width="120px">
<el-form-item label="数据源/模式名称" prop="sourceName"> <el-form-item label="数据源/模式名称" prop="sourceName">
<el-input v-model="form.sourceName" placeholder="请输入数据源/模式名称" maxlength="25"/> <el-input v-model="form.sourceName" placeholder="请输入数据源/模式名称" maxlength="50"/>
</el-form-item> </el-form-item>
<el-form-item label="状态"> <el-form-item label="状态">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
@ -120,7 +120,7 @@
:close-on-press-escape="false"> :close-on-press-escape="false">
<el-form ref="syncTableForm" :model="syncTableForm" :rules="syncTableRule" label-width="50px"> <el-form ref="syncTableForm" :model="syncTableForm" :rules="syncTableRule" label-width="50px">
<el-form-item label="表名" prop="tableName"> <el-form-item label="表名" prop="tableName">
<el-input v-model="syncTableForm.tableName" placeholder="请输入表名" maxlength="20"/> <el-input v-model="syncTableForm.tableName" placeholder="请输入表名" maxlength="50"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">

Loading…
Cancel
Save