Skip to content

Commit

Permalink
added some new methods for working with Tuples, also added a Tuples u…
Browse files Browse the repository at this point in the history
…tility class which allows you to easily reduce Tuples in data sets with joins
  • Loading branch information
jexenberger committed Dec 5, 2013
1 parent f6310e6 commit 36692f5
Show file tree
Hide file tree
Showing 13 changed files with 606 additions and 10 deletions.
9 changes: 8 additions & 1 deletion pom.xml
@@ -1,13 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.lambdatuples</groupId>
<artifactId>lambdatuples</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Lambda Tuples</name>

<dependencies>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/org/github/lambatuples/LambdaTuplesContext.java
Expand Up @@ -221,5 +221,20 @@ public class LambdaTuplesContext {
public static String SCHEMA = null;


public synchronized static void init(DataSource dataSource) {
assert dataSource != null;
DATA_SOURCE = dataSource;
}

public synchronized static void init(String schema, DataSource dataSource) {
assert schema != null;
init(dataSource);
}

public synchronized static DataSource getDataSource() {
return DATA_SOURCE;
}



}
14 changes: 9 additions & 5 deletions src/main/java/org/github/lambatuples/ResultSetIterator.java
Expand Up @@ -260,13 +260,17 @@ public boolean hasNext() {

}

private void close() {
try {
rs.close();
void close() {
if (rs != null) {
try {
ps.close();
rs.close();
} catch (SQLException e) {
//nothing we can do here

}
}
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
//nothing we can do here
Expand Down
19 changes: 18 additions & 1 deletion src/main/java/org/github/lambatuples/SQL.java
Expand Up @@ -203,12 +203,14 @@ file or class name and description of purpose be included on the
*/
package org.github.lambatuples;

import javax.sql.DataSource;
import java.sql.*;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

import static java.util.stream.Collectors.groupingBy;
import static org.github.lambatuples.Pair.cons;

/**
Expand All @@ -235,7 +237,7 @@ public static void select(Connection connection, String sql, ResultSetProcessor
try (PreparedStatement ps = connection.prepareStatement(sql)) {
int cnt = 0;
for (Object param : params) {
ps.setObject(++cnt, param, MAPPINGS.get(param.getClass()));
ps.setObject(++cnt, param);
}
try (ResultSet rs = ps.executeQuery()) {
long rowCnt = 0;
Expand Down Expand Up @@ -321,6 +323,21 @@ private static Pair<String, Integer>[] getColumns(ResultSetMetaData rs) {
}


public static <T extends Object> T exec(SQLAction<T> action) {
DataSource dataSource = LambdaTuplesContext.getDataSource();
if (dataSource == null) {
throw new IllegalStateException("Please set the datasource in "+LambdaTuplesContext.class.getName());
}
try (Connection connection = dataSource.getConnection()) {
return action.exec(connection);
} catch (SQLException e) {
throw new DataAccessException(e);
}
}




public static Stream<Tuple> stream(final Connection connection, final String sql, final Object... parms) {

return StreamSupport.stream(Spliterators.spliteratorUnknownSize(new ResultSetIterator(connection, sql), 0), false);
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/org/github/lambatuples/SQLAction.java
@@ -0,0 +1,18 @@
package org.github.lambatuples;

import java.sql.Connection;
import java.sql.SQLException;

/**
* Created with IntelliJ IDEA.
* User: julian3
* Date: 2013/12/05
* Time: 3:28 PM
* To change this template use File | Settings | File Templates.
*/
@FunctionalInterface
public interface SQLAction<T> {


public T exec(Connection conn) throws SQLException;
}
16 changes: 15 additions & 1 deletion src/main/java/org/github/lambatuples/Tuple.java
Expand Up @@ -208,6 +208,7 @@ file or class name and description of purpose be included on the
import java.util.stream.Collectors;

import static java.util.Optional.ofNullable;
import static java.util.stream.Collectors.toList;
import static org.github.lambatuples.TransformerService.convert;

/**
Expand Down Expand Up @@ -320,7 +321,7 @@ public default Tuple subTuple(final String... subset) {
}
return false;
})
.collect(Collectors.toList());
.collect(toList());
return createFrom(result);
}

Expand All @@ -335,6 +336,19 @@ public default Tuple merge(Tuple second) {
return createFrom(mergedCollection);
}

public default Tuple set(Pair<String, ?> ... columns) {
DefaultTuple newTuple = new DefaultTuple(columns);
return newTuple.merge(this);
}


public default Tuple reduce(String suffix) {
List<Pair<String, ?>> results = stream().filter((column) -> column.getCar().toLowerCase().startsWith(suffix.toLowerCase())).collect(toList());
return new DefaultTuple(results);
}




public default boolean hasVal(String name) {
return val(name).isPresent();
Expand Down

0 comments on commit 36692f5

Please sign in to comment.