diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000..b1f0c40
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,32 @@
+name: Publish
+
+on: push
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK 17
+ uses: actions/setup-java@v3
+ with:
+ java-version: '17'
+ distribution: 'zulu'
+ server-id: github
+ settings-path: ${{ github.workspace }}
+
+ - name: Run chmod to make gradlew executable
+ run: chmod +x ./gradlew
+
+ - name: Build with Gradle
+ uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
+ with:
+ arguments: bootJar
+ - name: Deploy to prod
+ env:
+ deployUser: ${{ secrets.CLOJARS_USER }}
+ deployToken: ${{ secrets.CLOJARS_TOKEN }}
+ run: |
+ sshpass -v -p ${{ secrets.DEPLOY_PASSWORD }} scp -o StrictHostKeyChecking=no -P ${{ secrets.DEPLOY_PORT }} ${{ github.workspace }}/build/libs/backend.jar ${{ secrets.DEPLOY_USERNAME }}@${{ secrets.DEPLOY_HOST }}:/home/dynomake/vpn/
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 2266f6b..fae6c8e 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,7 +4,7 @@
-
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index d44ef08..4efc062 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
group 'io.github.dynomake'
-version '1.0.2'
+version '1.0.4'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
@@ -24,14 +24,15 @@ dependencies {
testImplementation group: 'mysql', name: 'mysql-connector-java', version: '5.1.47'
}
+
publishing {
repositories {
maven {
name = "clojars"
url = uri("https://clojars.org/repo")
credentials {
- username = clojarsUserName
- password = clojarsDeployToken
+ username = "$System.env.deployUser"
+ password = "$System.env.deployToken"
}
}
diff --git a/src/main/java/net/wonsi/api/table/WonsiTable.java b/src/main/java/net/wonsi/api/table/WonsiTable.java
index 8722152..cfb18c6 100644
--- a/src/main/java/net/wonsi/api/table/WonsiTable.java
+++ b/src/main/java/net/wonsi/api/table/WonsiTable.java
@@ -11,6 +11,7 @@ public interface WonsiTable {
DeleteRequest delete();
UpdateRequest update();
+ String getName();
ExecutedReturningAction customSelect(@NonNull String query);
Request customQuery(@NonNull String query);
diff --git a/src/main/java/net/wonsi/column/type/IntType.java b/src/main/java/net/wonsi/column/type/IntType.java
index 0d7e341..48acaa7 100644
--- a/src/main/java/net/wonsi/column/type/IntType.java
+++ b/src/main/java/net/wonsi/column/type/IntType.java
@@ -5,7 +5,7 @@ public class IntType implements ColumnType {
@Override
public String convertToString(int length) {
if (length <= 5) return "tinyint";
- if (length <= 6) return "mediumint";
+ if (length == 6) return "mediumint";
if (length < 10) return "int";
else return "bigint";
}
diff --git a/src/main/java/net/wonsi/proxy/request/RealInsertRequest.java b/src/main/java/net/wonsi/proxy/request/RealInsertRequest.java
index 0df59da..9d2f6ec 100644
--- a/src/main/java/net/wonsi/proxy/request/RealInsertRequest.java
+++ b/src/main/java/net/wonsi/proxy/request/RealInsertRequest.java
@@ -1,6 +1,7 @@
package net.wonsi.proxy.request;
import com.google.common.base.Joiner;
+import lombok.val;
import net.wonsi.api.request.InsertRequest;
import net.wonsi.util.ExecutorUtil;
import net.wonsi.util.StringUtil;
@@ -20,12 +21,15 @@ public class RealInsertRequest implements InsertRequest {
private int limit;
private boolean fixDuplicate;
private Map data;
+ private final String primaryKeyName;
- public RealInsertRequest(Connection connection, String tableName) {
+ public RealInsertRequest(Connection connection, String tableName, String primaryKeyName) {
this.connection = connection;
this.tableName = tableName;
+ this.primaryKeyName = primaryKeyName;
condition = "1";
limit = 10;
+
}
@Override
@@ -58,7 +62,14 @@ public CompletableFuture async() {
@Override
public void sync() {
try {
- PreparedStatement statement = connection.prepareStatement("INSERT INTO " + tableName + " (" + Joiner.on(",").join(data.keySet()) + ") VALUES (" + StringUtil.repeat(",?", data.size()).replaceFirst(",", "")+ ")" + (fixDuplicate ? " ON DUPLICATE KEY UPDATE " + Joiner.on("= ?,").join(data.keySet()) + " = ?" : ""));
+ val mapWithoutPrimary = new HashMap<>(data);
+ if (fixDuplicate) {
+ mapWithoutPrimary.remove(primaryKeyName);
+ }
+ val end = (fixDuplicate ? " ON DUPLICATE KEY UPDATE " + Joiner.on("= ?,").join(mapWithoutPrimary.keySet()) + " = ?" : "");
+ val query = "INSERT INTO " + tableName + " (" + Joiner.on(",").join(data.keySet()) + ") VALUES (" + StringUtil.repeat(",?", data.size()).replaceFirst(",", "")+ ")" + end;
+// System.out.println(query);
+ PreparedStatement statement = connection.prepareStatement(query);
int currentArgument = 1;
@@ -69,7 +80,7 @@ public void sync() {
if (fixDuplicate){
// currentArgument = currentArgument-2;
- for (Object o : data.values()) {
+ for (Object o : mapWithoutPrimary.values()) {
statement.setObject(currentArgument, o);
currentArgument++;
}
diff --git a/src/main/java/net/wonsi/proxy/table/RealWonsiTable.java b/src/main/java/net/wonsi/proxy/table/RealWonsiTable.java
index 82f31bc..607db41 100644
--- a/src/main/java/net/wonsi/proxy/table/RealWonsiTable.java
+++ b/src/main/java/net/wonsi/proxy/table/RealWonsiTable.java
@@ -1,7 +1,8 @@
package net.wonsi.proxy.table;
-import lombok.AllArgsConstructor;
import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
import net.wonsi.api.mapping.WonsiColumn;
import net.wonsi.api.mapping.WonsiPrimary;
import net.wonsi.api.request.*;
@@ -23,12 +24,13 @@
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
-@AllArgsConstructor
+@RequiredArgsConstructor
public class RealWonsiTable implements WonsiTable {
- private Connection connection;
- private Function deserializer;
- private String tableName;
+ private final Connection connection;
+ private final Function deserializer;
+ private final String tableName;
+ private String primaryKeyName;
@Override
public SelectRequest select() {
@@ -37,7 +39,7 @@ public SelectRequest select() {
@Override
public InsertRequest insert() {
- return new RealInsertRequest(connection, tableName);
+ return new RealInsertRequest(connection, tableName, primaryKeyName);
}
@Override
@@ -50,6 +52,11 @@ public UpdateRequest update() {
return new RealUpdateRequest(connection, tableName);
}
+ @Override
+ public String getName() {
+ return tableName;
+ }
+
@Override
public ExecutedReturningAction customSelect(@NonNull String query) {
return new RealExecutedReturningAction(ExecutorUtil.getResult(query, connection), deserializer);
@@ -76,7 +83,10 @@ public void createIfNotExits(Class tclass) {
for (Field field : tclass.getDeclaredFields()) {
WonsiColumn column = field.getAnnotation(WonsiColumn.class);
- arguments.add(column.name() + ' ' + ColumnUtil.get(field.getType()).convertToString(column.length()) + (field.getAnnotation(WonsiPrimary.class) != null ? " PRIMARY KEY" : ""));
+ val primary = (field.getAnnotation(WonsiPrimary.class) != null ? " PRIMARY KEY" : "");
+ arguments.add(column.name() + ' ' + ColumnUtil.get(field.getType()).convertToString(column.length()) + primary);
+ if (!primary.isEmpty())
+ primaryKeyName = column.name();
}
StringBuilder query = new StringBuilder("CREATE TABLE IF NOT EXISTS `");
diff --git a/src/main/java/net/wonsi/util/Condition.java b/src/main/java/net/wonsi/util/Condition.java
index c5c8bb7..3221a6f 100644
--- a/src/main/java/net/wonsi/util/Condition.java
+++ b/src/main/java/net/wonsi/util/Condition.java
@@ -10,7 +10,10 @@ public class Condition {
private String condition;
public static Condition is(@NonNull String column, @NonNull Object value) {
- return new Condition('`' + column + '`' + " = " + value);
+ if (value instanceof String)
+ return new Condition(column + " = " + "'" + value + "'");
+
+ return new Condition(column + " = " + value);
}
public static Condition over(@NonNull String column, @NonNull Object value) {