Skip to content

Commit

Permalink
Merge pull request #65 from yuu-nkjm/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
yuu-nkjm authored Mar 15, 2022
2 parents 1b2b6bd + 9db505d commit 79ce19a
Show file tree
Hide file tree
Showing 22 changed files with 99 additions and 39 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ The latest release is available at [Maven Central Repository](https://mvnreposit
<dependency>
<groupId>org.nkjmlab</groupId>
<artifactId>sorm4j</artifactId>
<version>1.4.6</version>
<version>1.4.7</version>
</dependency>
```
We assume the following customer table in example: `create table customer (id int primary key, name varchar, address varchar)`
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<artifactId>sorm4j-parent</artifactId>
<name>sorm4j-parent</name>
<description>Simple micro Object-Relation Mapper for Java</description>
<version>1.4.6</version>
<version>1.4.7</version>
<packaging>pom</packaging>
<url>https://github.com/nkjmlab</url>
<licenses>
Expand Down
4 changes: 2 additions & 2 deletions sorm4j-example/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.nkjmlab</groupId>
<artifactId>sorm4j-example</artifactId>
<version>1.4.6</version>
<version>1.4.7</version>
<description>Example of Sorm4j</description>

<properties>
<sorm4j-version>1.4.6</sorm4j-version>
<sorm4j-version>1.4.7</sorm4j-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<additionalparam>-Xdoclint:none</additionalparam>
<downloadSources>true</downloadSources>
Expand Down
4 changes: 2 additions & 2 deletions sorm4j-jmh/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.nkjmlab</groupId>
<artifactId>sorm4j-jmh</artifactId>
<version>1.4.6</version>
<version>1.4.7</version>
<packaging>jar</packaging>
<name>Sorm4j benchmark</name>

<properties>
<sorm4j-version>1.4.6</sorm4j-version>
<sorm4j-version>1.4.7</sorm4j-version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

Expand Down
45 changes: 36 additions & 9 deletions sorm4j/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>org.nkjmlab</groupId>
<artifactId>sorm4j-parent</artifactId>
<version>1.4.6</version>
<version>1.4.7</version>
</parent>
<properties>
<slf4j-version>1.7.30</slf4j-version>
Expand All @@ -22,7 +22,7 @@
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
<version>2.17.2</version>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
Expand Down Expand Up @@ -57,14 +57,14 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.2.0</version>
<version>4.4.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
<version>2.17.2</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
Expand All @@ -78,28 +78,28 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
<version>8.0.28</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.3.1</version>
<version>42.3.3</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.1.0.jre17-preview</version>
<version>10.2.0.jre17</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc10 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc10</artifactId>
<version>19.13.0.0.1</version>
<version>19.14.0.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down Expand Up @@ -131,8 +131,35 @@
<additionalClasspathElement>src/test/java/</additionalClasspathElement>
</additionalClasspathElements>
<argLine>
--illegal-access=warn
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.annotation=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.common=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.context=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.mapping=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.result=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.sql=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.table=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.util.command=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.util.h2.sql=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.util.logger=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.util.sql=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.util.table_def=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.util.table_def.annotation=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.internal=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.internal.common=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.internal.mapping=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.internal.mapping.multirow=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.internal.result=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.internal.sql=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.internal.util=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/org.nkjmlab.sorm4j.engine=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/repackage.net.sf.persist.tests.common=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/repackage.net.sf.persist.tests.engine.h2=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/repackage.net.sf.persist.tests.engine.mysql=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/repackage.net.sf.persist.tests.engine.oracle=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/repackage.net.sf.persist.tests.engine.postgresql=ALL-UNNAMED
--add-opens org.nkjmlab.sorm4j/repackage.net.sf.persist.tests.engine.sqlserver=ALL-UNNAMED
${argLine}
</argLine>
</configuration>
Expand Down
19 changes: 19 additions & 0 deletions sorm4j/src/main/java/module-info.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module org.nkjmlab.sorm4j {
requires transitive java.sql;
requires transitive org.apache.logging.log4j;
requires transitive org.slf4j;
exports org.nkjmlab.sorm4j;
exports org.nkjmlab.sorm4j.annotation;
exports org.nkjmlab.sorm4j.common;
exports org.nkjmlab.sorm4j.context;
exports org.nkjmlab.sorm4j.mapping;
exports org.nkjmlab.sorm4j.result;
exports org.nkjmlab.sorm4j.sql;
exports org.nkjmlab.sorm4j.table;
exports org.nkjmlab.sorm4j.util.command;
exports org.nkjmlab.sorm4j.util.h2.sql;
exports org.nkjmlab.sorm4j.util.logger;
exports org.nkjmlab.sorm4j.util.sql;
exports org.nkjmlab.sorm4j.util.table_def;
exports org.nkjmlab.sorm4j.util.table_def.annotation;
}
2 changes: 1 addition & 1 deletion sorm4j/src/main/java/org/nkjmlab/sorm4j/Sorm.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import javax.sql.DataSource;
import org.nkjmlab.sorm4j.annotation.Experimental;
import org.nkjmlab.sorm4j.common.ConsumerHandler;
import org.nkjmlab.sorm4j.common.DriverManagerDataSource;
import org.nkjmlab.sorm4j.common.FunctionHandler;
import org.nkjmlab.sorm4j.context.SormContext;
import org.nkjmlab.sorm4j.internal.SormImpl;
import org.nkjmlab.sorm4j.internal.util.DriverManagerDataSource;
import org.nkjmlab.sorm4j.table.Table;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.nkjmlab.sorm4j.internal.util;
package org.nkjmlab.sorm4j.common;

import java.io.PrintWriter;
import java.sql.Connection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import org.nkjmlab.sorm4j.Orm;
import org.nkjmlab.sorm4j.annotation.Experimental;
Expand Down Expand Up @@ -50,8 +52,7 @@ public static TableDefinition.Builder builder(String tableName) {

public static TableDefinition.Builder builder(Class<?> ormRecordClass) {

Builder builder =
TableDefinition.builder(StringCache.toCanonicalCase(toTableName(ormRecordClass)));
Builder builder = TableDefinition.builder(toUpperSnakeCase(toTableName(ormRecordClass)));

Optional.ofNullable(ormRecordClass.getAnnotation(Indexes.class)).map(a -> a.value()).ifPresent(
vals -> Arrays.stream(vals).forEach(v -> builder.addIndexDefinition(v.split(","))));
Expand All @@ -75,30 +76,43 @@ public static TableDefinition.Builder builder(Class<?> ormRecordClass) {
List<String> opt = new ArrayList<>();
opt.add(TableDefinition.toSqlDataType(field.getType()));

for (Annotation ann : parameterAnnotationsOfConstructor == null ? field.getAnnotations()
: parameterAnnotationsOfConstructor[i]) {
Set<Annotation> anns = new LinkedHashSet<>();
Arrays.stream(field.getAnnotations()).forEach(a -> anns.add(a));
if (parameterAnnotationsOfConstructor != null) {
Arrays.stream(parameterAnnotationsOfConstructor[i]).forEach(a -> anns.add(a));
}
for (Annotation ann : anns) {
if (ann instanceof PrimaryKey) {
opt.add("primary key");
} else if (ann instanceof AutoIncrement) {
opt.add("auto_increment");
} else if (ann instanceof NotNull) {
opt.add("not null");
} else if (ann instanceof Index) {
builder.addIndexDefinition(field.getName());
builder.addIndexDefinition(toUpperSnakeCase(field.getName()));
} else if (ann instanceof Unique) {
builder.addUniqueConstraint(field.getName());
builder.addUniqueConstraint(toUpperSnakeCase(field.getName()));
} else if (ann instanceof Check) {
opt.add("check (" + ((Check) ann).value() + ")");
} else if (ann instanceof Default) {
opt.add("default " + ((Default) ann).value());
}

}
builder.addColumnDefinition(field.getName(), opt.toArray(String[]::new));
builder.addColumnDefinition(toUpperSnakeCase(field.getName()), opt.toArray(String[]::new));
}
return builder;
}

/**
* Given a field or class name in the form CompoundName (for classes) or compoundName (for fields)
* will return a set of guessed names such as [COMPOUND_NAME].
*/
public static String toUpperSnakeCase(final String compoundName) {
String camelCase = compoundName.substring(0, 1).toLowerCase() + compoundName.substring(1);
return StringCache.toUpperCase(camelCase.replaceAll("([A-Z])", "_$1"));
}

private static String toTableName(Class<?> ormRecordClass) {
OrmTable ann = ormRecordClass.getAnnotation(OrmTable.class);
if (ann == null || ann.value().length() == 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Target({ElementType.PARAMETER, ElementType.FIELD})
public @interface AutoIncrement {

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Target({ElementType.PARAMETER, ElementType.FIELD})
public @interface Check {
String value();
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Target({ElementType.PARAMETER, ElementType.FIELD})
public @interface Default {
String value();
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Target({ElementType.PARAMETER, ElementType.FIELD})
public @interface Index {

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Target({ElementType.PARAMETER, ElementType.FIELD})
public @interface NotNull {

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Target({ElementType.PARAMETER, ElementType.FIELD})
public @interface PrimaryKey {

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Target({ElementType.PARAMETER, ElementType.FIELD})
public @interface Unique {

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.junit.jupiter.api.Assertions.*;
import java.sql.SQLException;
import org.junit.jupiter.api.Test;
import org.nkjmlab.sorm4j.common.DriverManagerDataSource;
import org.nkjmlab.sorm4j.test.common.SormTestUtils;

class DriverManagerDataSourceTest {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.nkjmlab.sorm4j.util.table;
package org.nkjmlab.sorm4j.table;

import static org.assertj.core.api.Assertions.*;
import static org.nkjmlab.sorm4j.util.sql.SqlKeyword.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package org.nkjmlab.sorm4j.util.table;
package org.nkjmlab.sorm4j.table;

import static org.assertj.core.api.Assertions.*;
import static org.nkjmlab.sorm4j.table.TableSchemaTest.TempGuestTable.Column.*;
import static org.nkjmlab.sorm4j.util.sql.SqlKeyword.*;
import static org.nkjmlab.sorm4j.util.table.TableSchemaTest.TempGuestTable.Column.*;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import org.nkjmlab.sorm4j.Sorm;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.nkjmlab.sorm4j.util.table;
package org.nkjmlab.sorm4j.table;

import static org.assertj.core.api.Assertions.*;
import static org.nkjmlab.sorm4j.test.common.SormTestUtils.*;
Expand All @@ -9,7 +9,6 @@
import org.junit.jupiter.api.Test;
import org.nkjmlab.sorm4j.Sorm;
import org.nkjmlab.sorm4j.sql.ParameterizedSql;
import org.nkjmlab.sorm4j.table.BasicTable;
import org.nkjmlab.sorm4j.test.common.Guest;
import org.nkjmlab.sorm4j.test.common.Player;
import org.nkjmlab.sorm4j.test.common.Sport;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import static org.nkjmlab.sorm4j.util.sql.SqlKeyword.*;
import java.util.concurrent.atomic.AtomicInteger;
import org.nkjmlab.sorm4j.Sorm;
import org.nkjmlab.sorm4j.common.DriverManagerDataSource;
import org.nkjmlab.sorm4j.context.SormContext;
import org.nkjmlab.sorm4j.internal.util.DriverManagerDataSource;
import org.nkjmlab.sorm4j.util.table_def.BasicTableWithDefinition;
import org.nkjmlab.sorm4j.util.table_def.TableDefinition;
import org.nkjmlab.sorm4j.util.table_def.TableWithDefinition;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ void test() throws URISyntaxException {
Sorm sorm = SormTestUtils.createSormWithNewContext();
TableDefinition def = TableDefinition.builder(TableDefExample.class).build();
assertThat(def.getTableNameAndColumnDefinitions()).isEqualTo(
"TABLEDEFEXAMPLES(id bigint primary key auto_increment, booleanCol boolean, byteCol tinyint, charCol character, shortCol smallint, intCol integer default 0, floatCol float, doubleCol double check (doubleCol>0), bigDecimal numeric, phoneNumber varchar not null, localDateCol date, localTimeCol time, localDateTime timestamp, offsetTime time with time zone, offsetDateTime timestamp with time zone, blob blob, clob clob, inputStream longvarbinary, reader longvarchar, unique(phoneNumber))");
"TABLE_DEF_EXAMPLES(ID bigint primary key auto_increment, BOOLEAN_COL boolean, BYTE_COL tinyint, CHAR_COL character, SHORT_COL smallint, INT_COL integer default 0, FLOAT_COL float, DOUBLE_COL double check (double_col>0), BIG_DECIMAL numeric, PHONE_NUMBER varchar not null, LOCAL_DATE_COL date, LOCAL_TIME_COL time, LOCAL_DATE_TIME timestamp, OFFSET_TIME time with time zone, OFFSET_DATE_TIME timestamp with time zone, BLOB blob, CLOB clob, INPUT_STREAM longvarbinary, READER longvarchar, unique(PHONE_NUMBER))");
sorm.executeUpdate(def.getCreateTableIfNotExistsStatement());

String selectSql = H2CsvReadSql
Expand Down Expand Up @@ -74,7 +74,7 @@ public static class TableDefExample {

public TableDefExample(@PrimaryKey @AutoIncrement Long id, Boolean booleanCol, Byte byteCol,
Character charCol, Short shortCol, @Default("0") Integer intCol, Float floatCol,
@Check("doubleCol>0") Double doubleCol, BigDecimal bigDecimal,
@Check("double_col>0") Double doubleCol, BigDecimal bigDecimal,
@Index @Unique @NotNull String phoneNumber, LocalDate localDateCol, LocalTime localTimeCol,
LocalDateTime localDateTimeCol, OffsetTime offsetTime, OffsetDateTime offsetDateTime,
Blob blob, Clob clob, InputStream inputStream, Reader reader) {
Expand Down

0 comments on commit 79ce19a

Please sign in to comment.