use of org.jooq.Configuration in project jOOQ by jOOQ.
the class SparkCRUD method main.
public static void main(String[] args) throws Exception {
final BasicDataSource ds = new BasicDataSource();
final Properties properties = new Properties();
properties.load(SparkCRUD.class.getResourceAsStream("/config.properties"));
ds.setDriverClassName(properties.getProperty("db.driver"));
ds.setUrl(properties.getProperty("db.url"));
ds.setUsername(properties.getProperty("db.username"));
ds.setPassword(properties.getProperty("db.password"));
final ConnectionProvider cp = new DataSourceConnectionProvider(ds);
final Configuration configuration = new DefaultConfiguration().set(cp).set(SQLDialect.H2).set(new ThreadLocalTransactionProvider(cp, true));
final DSLContext ctx = DSL.using(configuration);
final JSONFormat format = new JSONFormat().format(true).header(false).recordFormat(RecordFormat.OBJECT);
// Creates a new book resource, will return the ID to the created resource
// author and title are sent as query parameters e.g. /books?author=Foo&title=Bar
post("/books", (request, response) -> {
return ctx.transactionResult(() -> {
AuthorRecord author = upsertAuthor(ctx, request);
BookRecord book = ctx.newRecord(BOOK);
book.setAuthorId(author.getId());
book.setTitle(request.queryParams("title"));
book.store();
// 201 Created
response.status(201);
return book.formatJSON(format);
});
});
// Gets the book resource for the provided id
get("/books/:id", (request, response) -> {
Record2<String, String> book = ctx.select(BOOK.TITLE, AUTHOR.NAME).from(BOOK).join(AUTHOR).on(BOOK.AUTHOR_ID.eq(AUTHOR.ID)).where(BOOK.ID.eq(BOOK.ID.getDataType().convert(request.params(":id")))).fetchOne();
if (book != null) {
return book.formatJSON(format);
} else {
// 404 Not found
response.status(404);
return "{\"error\":\"Book not found\"}";
}
});
// Updates the book resource for the provided id with new information
// author and title are sent as query parameters e.g. /books/<id>?author=Foo&title=Bar
put("/books/:id", (request, response) -> {
return ctx.transactionResult(() -> {
BookRecord book = ctx.selectFrom(BOOK).where(BOOK.ID.eq(BOOK.ID.getDataType().convert(request.params(":id")))).fetchOne();
if (book != null) {
AuthorRecord author = upsertAuthor(ctx, request);
String newAuthor = request.queryParams("author");
String newTitle = request.queryParams("title");
if (newAuthor != null)
book.setAuthorId(author.getId());
if (newTitle != null)
book.setTitle(newTitle);
book.update();
return book.formatJSON(format);
} else {
// 404 Not found
response.status(404);
return "{\"error\":\"Book not found\"}";
}
});
});
// Deletes the book resource for the provided id
delete("/books/:id", (request, response) -> {
return ctx.transactionResult(() -> {
BookRecord book = ctx.deleteFrom(BOOK).where(BOOK.ID.eq(BOOK.ID.getDataType().convert(request.params(":id")))).returning().fetchOne();
if (book != null) {
return book.formatJSON(format);
} else {
// 404 Not found
response.status(404);
return "{\"error\":\"Book not found\"}";
}
});
});
// Gets all available book resources
get("/books", (request, response) -> {
return ctx.select(BOOK.ID, BOOK.TITLE).from(BOOK).fetch().formatJSON(format);
});
}
use of org.jooq.Configuration in project jOOQ by jOOQ.
the class DAOImpl method records.
private /* non-final */
List<R> records(Collection<P> objects, boolean forUpdate) {
List<R> result = new ArrayList<>(objects.size());
Field<?>[] pk = pk();
DSLContext ctx;
// [#7731] Create a Record -> POJO mapping to allow for reusing the below
// derived Configuration for improved reflection caching.
IdentityHashMap<R, Object> mapping = !FALSE.equals(settings().isReturnRecordToPojo()) ? new IdentityHashMap<>() : null;
// are copied back to the relevant POJO using the RecordListener SPI
if (mapping != null) {
Consumer<? super RecordContext> end = c -> {
Record record = c.record();
// TODO: [#2536] Use mapper()
if (record != null)
record.into(mapping.get(record));
};
ctx = configuration().deriveAppending(onStoreEnd(end).onInsertEnd(end).onUpdateEnd(end).onDeleteEnd(end)).dsl();
} else
ctx = ctx();
for (P object : objects) {
R record = ctx.newRecord(table, object);
if (mapping != null)
mapping.put(record, object);
if (forUpdate && pk != null)
for (Field<?> field : pk) record.changed(field, false);
Tools.resetChangedOnNotNull(record);
result.add(record);
}
return result;
}
use of org.jooq.Configuration in project jOOQ by jOOQ.
the class CatalogMetaImpl method filterSchemas.
static final Meta filterSchemas(Configuration configuration, Set<Schema> schemas) {
Map<Name, Catalog> c = new LinkedHashMap<>();
Map<Name, List<Schema>> mapping = new LinkedHashMap<>();
for (Schema schema : schemas) mapping.computeIfAbsent(nameOrDefault(schema.getCatalog()), k -> new ArrayList<>()).add(schema);
for (Schema schema : schemas) c.computeIfAbsent(nameOrDefault(schema.getCatalog()), k -> new CatalogImpl(k) {
@Override
public List<Schema> getSchemas() {
return mapping.get(getQualifiedName());
}
});
return filterCatalogs(configuration, new LinkedHashSet<>(c.values())).filterSchemas(schemas::contains);
}
use of org.jooq.Configuration in project jOOQ by jOOQ.
the class LoggerListener method renderEnd.
@Override
public void renderEnd(ExecuteContext ctx) {
if (log.isDebugEnabled()) {
Configuration configuration = ctx.configuration();
String newline = TRUE.equals(configuration.settings().isRenderFormatted()) ? "\n" : "";
// [#2939] Prevent excessive logging of bind variables only in DEBUG mode, not in TRACE mode.
if (!log.isTraceEnabled())
configuration = configuration.deriveAppending(new BindValueAbbreviator());
String[] batchSQL = ctx.batchSQL();
if (ctx.query() != null) {
// Actual SQL passed to JDBC
log.debug("Executing query", newline + ctx.sql());
// [#1278] DEBUG log also SQL with inlined bind values, if
// that is not the same as the actual SQL passed to JDBC
String inlined = DSL.using(configuration).renderInlined(ctx.query());
if (!ctx.sql().equals(inlined))
log.debug("-> with bind values", newline + inlined);
} else // [#2987] Log routines
if (ctx.routine() != null) {
log.debug("Calling routine", newline + ctx.sql());
String inlined = DSL.using(configuration).renderInlined(ctx.routine());
if (!ctx.sql().equals(inlined))
log.debug("-> with bind values", newline + inlined);
} else if (!StringUtils.isBlank(ctx.sql())) {
// [#1529] Batch queries should be logged specially
if (ctx.type() == ExecuteType.BATCH)
log.debug("Executing batch query", newline + ctx.sql());
else
log.debug("Executing query", newline + ctx.sql());
} else // [#2532] Log a complete BatchMultiple query
if (batchSQL.length > 0) {
if (batchSQL[batchSQL.length - 1] != null)
for (String sql : batchSQL) log.debug("Executing batch query", newline + sql);
}
}
}
use of org.jooq.Configuration in project jOOQ by jOOQ.
the class AbstractRoutine method registerOutParameters.
private final void registerOutParameters(ExecuteContext ctx) throws SQLException {
Configuration c = ctx.configuration();
CallableStatement statement = (CallableStatement) ctx.statement();
// Note that some RDBMS do not support binding by name very well
for (Parameter<?> parameter : getParameters0(ctx.configuration())) if (resultParameter(c, parameter))
registerOutParameter(ctx, statement, parameter);
}
Aggregations