Skip to content

Commit

Permalink
Merge pull request #79 from yuu-nkjm/develop
Browse files Browse the repository at this point in the history
Develop 2.1.0
  • Loading branch information
yuu-nkjm authored Dec 15, 2023
2 parents cd3096f + d0aa8fa commit b007d58
Show file tree
Hide file tree
Showing 66 changed files with 2,805 additions and 887 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

![](https://i.gyazo.com/1f05d989533d039fb5b3920352a9da5d.png)

![Build](https://travis-ci.org/yuu-nkjm/sorm4j.svg?branch=develop) [![Coverage Status](https://coveralls.io/repos/github/yuu-nkjm/sorm4j/badge.svg?branch=develop&service=github)](https://coveralls.io/github/yuu-nkjm/sorm4j?branch=develop) [![Maven Central](https://img.shields.io/maven-central/v/org.nkjmlab/sorm4j.svg)](http://mvnrepository.com/artifact/org.nkjmlab/sorm4j) [![javadoc](https://javadoc.io/badge2/org.nkjmlab/sorm4j/javadoc.svg)](https://javadoc.io/doc/org.nkjmlab/sorm4j)
[![Coverage Status](https://coveralls.io/repos/github/yuu-nkjm/sorm4j/badge.svg?branch=develop&service=github)](https://coveralls.io/github/yuu-nkjm/sorm4j?branch=develop) [![Maven Central](https://img.shields.io/maven-central/v/org.nkjmlab/sorm4j.svg)](http://mvnrepository.com/artifact/org.nkjmlab/sorm4j) [![javadoc](https://javadoc.io/badge2/org.nkjmlab/sorm4j/javadoc.svg)](https://javadoc.io/doc/org.nkjmlab/sorm4j)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Web Sites](https://img.shields.io/badge/Web%20Site-scrapbox-important.svg)](https://scrapbox.io/sorm4j/)

Sorm4j (Simple micro Object-Relation Mapper for Java) is a Java-based micro-ORM tool. Sorm4j is a sort of JDBC wrapper. It provides simple functionalities to select, insert, update, delete and merge.
Expand All @@ -21,7 +21,7 @@ The latest release is available at [Maven Central Repository](https://mvnreposit
<dependency>
<groupId>org.nkjmlab</groupId>
<artifactId>sorm4j</artifactId>
<version>2.0.7</version>
<version>2.1.0</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 sorm4j-example/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.nkjmlab</groupId>
<artifactId>sorm4j-example</artifactId>
<version>2.0.7</version>
<version>2.1.0</version>
<description>Example of Sorm4j</description>

<properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,32 +13,35 @@
import org.nkjmlab.sorm4j.Sorm;
import org.nkjmlab.sorm4j.annotation.OrmRecord;
import org.nkjmlab.sorm4j.example.opendata.LoadOpenDataExample.ElectronicsTable.Electronic;
import org.nkjmlab.sorm4j.example.opendata.LoadOpenDataExample.ModClothsTable.ModCloth;
import org.nkjmlab.sorm4j.example.opendata.LoadOpenDataExample.TwitchsTable.Twitch;
import org.nkjmlab.sorm4j.internal.util.Try;
import org.nkjmlab.sorm4j.util.h2.BasicH2Table;
import org.nkjmlab.sorm4j.util.h2.datasource.H2LocalDataSourceFactory;
import org.nkjmlab.sorm4j.util.h2.sql.CsvRead;
import org.nkjmlab.sorm4j.util.h2.functions.table.CsvRead;
import org.nkjmlab.sorm4j.util.h2.server.H2Startup;
import org.nkjmlab.sorm4j.util.table_def.annotation.PrimaryKeyColumns;

public class LoadOpenDataExample {
private static final org.apache.logging.log4j.Logger log =
org.apache.logging.log4j.LogManager.getLogger();

private static File srcDir = new File(new File(System.getProperty("java.io.tmpdir")), "sorm4j");
private static final H2LocalDataSourceFactory factory =
H2LocalDataSourceFactory.builder(srcDir, "sorm4j_example", "sa", "").build();
private static final H2LocalDataSourceFactory dataSourceFactory =
H2LocalDataSourceFactory.builder(new File("$TMPDIR/sorm4j"), "sorm4j_example", "sa", "")
.build();

static {
factory.makeFileDatabaseIfNotExists();
log.debug(factory.getServerModeJdbcUrl());
srcDir.mkdirs();
log.info("{}", srcDir);
dataSourceFactory.makeFileDatabaseIfNotExists();
dataSourceFactory.getDatabaseDirectory().mkdirs();
log.debug(dataSourceFactory.getMixedModeJdbcUrl());
log.info("{}", dataSourceFactory.getDatabaseDirectory());
}

private Sorm fileDb = Sorm.create(factory.createServerModeDataSource());
private Sorm fileDb = Sorm.create(dataSourceFactory.createMixedModeDataSource());

public static void main(String[] args) {

H2Startup.startDefaultLocalTcpServer();
H2Startup.startDefaultWebConsole();
LoadOpenDataExample example = new LoadOpenDataExample();
example.loadElectronic();
example.loadModCloth();
Expand Down Expand Up @@ -83,7 +86,7 @@ void loadTwitch() {
}

private static File downloadFile(String fileURL, String fileName) {
File outFile = new File(srcDir, fileName);
File outFile = new File(dataSourceFactory.getDatabaseDirectory(), fileName);
if (outFile.exists()) {
return outFile;
}
Expand All @@ -105,7 +108,7 @@ private static File downloadFile(String fileURL, String fileName) {
* @see <a href="https://github.com/MengtingWan/marketBias/tree/master/data">marketBias/data at
* master · MengtingWan/marketBias</a>
*/
public static class ModClothsTable extends BasicH2Table<Electronic> {
public static class ModClothsTable extends BasicH2Table<ModCloth> {

@OrmRecord
@PrimaryKeyColumns({"item_id", "user_id"})
Expand All @@ -124,7 +127,7 @@ public static record ModCloth(
int split) {}

public ModClothsTable(Sorm orm) {
super(orm, Electronic.class);
super(orm, ModCloth.class);
}

public File getCsv() {
Expand Down Expand Up @@ -186,7 +189,7 @@ public TwitchsTable(Sorm orm) {
}

public File getCsv() {
return new File(srcDir, "100k_a.csv");
return new File(dataSourceFactory.getDatabaseDirectory(), "100k_a.csv");
}
}

Expand Down
2 changes: 1 addition & 1 deletion sorm4j/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.nkjmlab</groupId>
<artifactId>sorm4j</artifactId>
<version>2.0.7</version>
<version>2.1.0</version>
<name>sorm4j</name>
<description>Simple micro Object-Relation Mapper for Java</description>
<url>https://github.com/yuu-nkjm/sorm4j</url>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,10 @@ private Constructor<T> getOrmRecordConstructor(Class<T> objectClass) {
() ->
objectClass.getConstructor(
Arrays.stream(objectClass.getDeclaredFields())
.filter(f -> !java.lang.reflect.Modifier.isStatic(f.getModifiers()))
.filter(
f ->
!java.lang.reflect.Modifier.isStatic(f.getModifiers())
&& !f.getName().startsWith(("this$")))
.map(f -> f.getType())
.toArray(Class[]::new)),
e ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,9 @@ public static <T> T[] convertToObjectArray(Class<?> componentType, Object srcArr

public static Object[] convertToObjectArray(Object srcArray) {
Class<?> componentType = srcArray.getClass().getComponentType();
if (componentType == null) {
throw new IllegalArgumentException("the argument could not be convert to an object array.");
}
if (!componentType.isArray()) {
switch (srcArray.getClass().getComponentType().toString()) {
case "boolean":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public static Map<String, String> getJavaProperties() {
*
* @return
*/
public static File getUserHomeDirectory() {
private static File getUserHomeDirectory() {
return new File(System.getProperty("user.home"));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public final class JulSormLogger extends AbstractSormLogger implements SormLogge
private final java.util.logging.Logger logger;
private static java.util.logging.Logger defaultLogger = getDefaultLogger();

public JulSormLogger(java.util.logging.Logger logger) {
JulSormLogger(java.util.logging.Logger logger) {
this.logger = logger;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,26 @@ private static boolean isEnable() {
}

private final org.apache.logging.log4j.Logger logger;
private final ParameterizedStringFormatter logMessageFormatter;

public static SormLogger getLogger() {
return getLogger(ParameterizedStringFormatter.LENGTH_512);
}

public static SormLogger getLogger(ParameterizedStringFormatter logMessageFormatter) {
if (!enableLogger) {
System.err.println(
"sorm4j: [org.apache.logging.log4j.Logger] is not found at the classpath."
+ "If you want to use Log4j2, you should add Log4j2 logger at the classpath.");
}
return new Log4jSormLogger(org.apache.logging.log4j.LogManager.getLogger());
return new Log4jSormLogger(
org.apache.logging.log4j.LogManager.getLogger(), logMessageFormatter);
}

Log4jSormLogger(org.apache.logging.log4j.Logger logger) {
private Log4jSormLogger(
org.apache.logging.log4j.Logger logger, ParameterizedStringFormatter logMessageFormatter) {
this.logger = logger;
this.logMessageFormatter = logMessageFormatter;
}

@Override
Expand All @@ -47,9 +55,10 @@ public void debug(String format, Object... params) {
private void printf(int depth, Level level, String format, Object... params) {
this.logger.printf(
level,
"%n "
System.lineSeparator()
+ " "
+ MethodInvokerInfoUtils.getInvokerInfo(depth, new Throwable().getStackTrace())
+ ParameterizedStringFormatter.LENGTH_256.format(format, params));
+ logMessageFormatter.format(format, params));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ private static boolean isEnable() {

private final org.slf4j.Logger logger;

Slf4jSormLogger(org.slf4j.Logger logger) {
private Slf4jSormLogger(org.slf4j.Logger logger) {
this.logger = logger;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,19 @@
/**
* SQL parser for named parameters.
*
* <p>Following characters could be used for named parameters.
* <p>Example.
*
* <pre>
* <code>
* ('a' &lt;= c &amp;&amp; c &lt;= 'z') || ('A' &lt;= c &amp;&amp; c &lt;= 'Z') || ('0' &lt;= c &amp;&amp; c &lt;= '9') || c == '_';
* </code>
* </pre>
* <pre><code>
* String sql = "select * from customer where id=:id and address=:address";
*
* ParameterizedSql statement =
* NamedParameterSql.parse(sql, Map.of("id",1, "address","Kyoto"));
* // or
* ParameterizedSql statement1 =
* NamedParameterSql.of(sql).bind("id", 1).bind("address", "Kyoto").parse();
*
* List<Customer> customers = sorm.readList(Customer.class, statement);
* </code></pre>
*
* @author yuu_nkjm
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import org.nkjmlab.sorm4j.Sorm;
import org.nkjmlab.sorm4j.annotation.Experimental;
import org.nkjmlab.sorm4j.util.h2.sql.CsvRead;
import org.nkjmlab.sorm4j.util.h2.functions.table.CsvRead;
import org.nkjmlab.sorm4j.util.table_def.BasicTable;
import org.nkjmlab.sorm4j.util.table_def.TableDefinition;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.nkjmlab.sorm4j.util.h2;

import org.nkjmlab.sorm4j.OrmConnection;
import org.nkjmlab.sorm4j.annotation.Experimental;

@Experimental
public interface H2Connection extends H2Orm {

/**
Expand Down
46 changes: 2 additions & 44 deletions sorm4j/src/main/java/org/nkjmlab/sorm4j/util/h2/H2Orm.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package org.nkjmlab.sorm4j.util.h2;

import java.io.File;

import org.nkjmlab.sorm4j.Orm;
import org.nkjmlab.sorm4j.OrmConnection;
import org.nkjmlab.sorm4j.util.h2.internal.H2Keyword;
import org.nkjmlab.sorm4j.annotation.Experimental;

@Experimental
public interface H2Orm {

/**
Expand All @@ -14,45 +13,4 @@ public interface H2Orm {
* @return
*/
Orm getOrm();

default void runscript(File srcFile) {
getOrm()
.execute(
String.join(
" ", "runscript", "from", H2Keyword.wrapSingleQuote(srcFile.getAbsolutePath())));
}

default void runscript(File srcFile, String password) {
getOrm()
.execute(
String.join(
" ",
"runscript",
"from",
H2Keyword.wrapSingleQuote(srcFile.getAbsolutePath()),
H2Keyword.scriptCompressionEncryption(password)));
}

default void scriptTo(File destFile, boolean includeDrop) {
getOrm()
.execute(
String.join(
" ",
"script",
H2Keyword.drop(includeDrop),
"to",
H2Keyword.wrapSingleQuote(destFile.getAbsolutePath())));
}

default void scriptTo(File destFile, boolean includeDrop, String password) {
getOrm()
.execute(
String.join(
" ",
"script",
H2Keyword.drop(includeDrop),
"to",
H2Keyword.wrapSingleQuote(destFile.getAbsolutePath()),
H2Keyword.scriptCompressionEncryption(password)));
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package org.nkjmlab.sorm4j.util.h2;

import org.nkjmlab.sorm4j.OrmConnection;
import org.nkjmlab.sorm4j.annotation.Experimental;
import org.nkjmlab.sorm4j.util.h2.internal.H2OrmConnectionImpl;

@Experimental
public interface H2OrmConnection extends OrmConnection, H2Connection {

static H2OrmConnection of(OrmConnection ormConnection) {
Expand Down
Loading

0 comments on commit b007d58

Please sign in to comment.