Skip to content

Commit

Permalink
eidt
Browse files Browse the repository at this point in the history
  • Loading branch information
usfalami committed Aug 27, 2024
1 parent 396db5f commit 9419996
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 29 deletions.
2 changes: 1 addition & 1 deletion src/main/java/org/usf/jquery/core/JDBCType.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ private static boolean isString(Object o) {

public static Optional<JDBCType> typeOf(Object o) {
if(o instanceof Typed to) {
return Optional.of(to.getType());
return ofNullable(to.getType());
}
return ofNullable(o).flatMap(v-> findType(e-> e.typeClass().isInstance(o)));
}
Expand Down
51 changes: 28 additions & 23 deletions src/main/java/org/usf/jquery/core/RequestQuery.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static java.util.Objects.isNull;
import static org.usf.jquery.core.Utils.isEmpty;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -33,32 +34,36 @@ public final class RequestQuery {
public List<DynamicModel> execute(DataSource ds) throws SQLException {
return execute(ds, new KeyValueMapper());
}

public <T> T execute(DataSource ds, ResultSetMapper<T> mapper) throws SQLException { // overload with sql types
try(var cn = ds.getConnection()){
log.debug("preparing statement : {}", query);
try(var ps = cn.prepareStatement(query)){
log.debug("with parameters : {}", Arrays.toString(args));
if(!isEmpty(args)) {
for(var i=0; i<args.length; i++) {
if(isNull(args[i])) {
ps.setNull(i+1, argTypes[i]);
}
else {
ps.setObject(i+1, args[i], argTypes[i]);
}
}
}
log.trace("executing SQL query...");
var bg = currentTimeMillis();
try(var rs = ps.executeQuery()){
log.trace("query executed in {} ms", currentTimeMillis() - bg);
try {
return mapper.map(rs);
}
catch(SQLException e) { // re-throw SQLException
throw new MappingException("error while mapping results", e);
return execute(cn, mapper);
}
}

public <T> T execute(Connection cn, ResultSetMapper<T> mapper) throws SQLException {
log.debug("preparing statement : {}", query);
try(var ps = cn.prepareStatement(query)){
log.debug("with parameters : {}", Arrays.toString(args));
if(!isEmpty(args)) {
for(var i=0; i<args.length; i++) {
if(isNull(args[i])) {
ps.setNull(i+1, argTypes[i]);
}
else {
ps.setObject(i+1, args[i], argTypes[i]);
}
}
}
log.trace("executing SQL query...");
var bg = currentTimeMillis();
try(var rs = ps.executeQuery()){
log.trace("query executed in {} ms", currentTimeMillis() - bg);
try {
return mapper.map(rs);
}
catch(SQLException e) { // re-throw SQLException
throw new MappingException("error while mapping results", e);
}
}
}
Expand Down
12 changes: 7 additions & 5 deletions src/main/java/org/usf/jquery/web/ViewMetadata.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
import static java.lang.String.join;
import static java.lang.System.currentTimeMillis;
import static java.time.Instant.now;
import static java.util.Collections.emptyMap;
import static java.util.Objects.nonNull;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
import static org.usf.jquery.core.QueryParameterBuilder.parametrized;
import static org.usf.jquery.core.DBColumn.allColumns;
import static org.usf.jquery.core.DBColumn.constant;
import static org.usf.jquery.core.SqlStringBuilder.quote;
import static org.usf.jquery.core.Utils.isEmpty;

Expand All @@ -20,6 +20,7 @@
import java.util.Set;

import org.usf.jquery.core.DBView;
import org.usf.jquery.core.RequestQueryBuilder;
import org.usf.jquery.core.TableView;

import lombok.AccessLevel;
Expand Down Expand Up @@ -99,8 +100,8 @@ void fetchView(DatabaseMetaData metadata, TableView view, String schema) throws
}

void fetch(DatabaseMetaData metadata, DBView qr, String schema) throws SQLException {
try(var ps = metadata.getConnection().createStatement();
var rs = ps.executeQuery("SELECT * FROM " + qr.sql(parametrized(schema, emptyMap())) + " AS v0 WHERE 1=0")){
var query = new RequestQueryBuilder().columns(allColumns(qr)).filters(constant(1).eq(constant(0))); //no data
query.build(schema).execute(metadata.getConnection(), rs->{
var db = reverseMapKeys();
var meta = rs.getMetaData();
for(var i=1; i<=meta.getColumnCount(); i++) {
Expand All @@ -112,7 +113,8 @@ void fetch(DatabaseMetaData metadata, DBView qr, String schema) throws SQLExcept
if(!db.isEmpty()) { //no such columns
throw columnsNotFoundException(db.keySet());
}
}
return null;
});
}

private Map<String, ColumnMetadata> reverseMapKeys(){ //key=columnName
Expand Down

0 comments on commit 9419996

Please sign in to comment.