Skip to content

Commit

Permalink
[#7498] Improve RenderMapping to allow for adding a schema to unquali…
Browse files Browse the repository at this point in the history
…fied objects
  • Loading branch information
lukaseder committed Jun 4, 2018
1 parent 3e6ea7f commit fafe20b
Show file tree
Hide file tree
Showing 11 changed files with 46 additions and 40 deletions.
2 changes: 1 addition & 1 deletion jOOQ/src/main/java/org/jooq/Named.java
Expand Up @@ -45,7 +45,7 @@
public interface Named extends QueryPart {

/**
* The name of this object.
* The unqualified name of this object.
*/
String getName();

Expand Down
7 changes: 3 additions & 4 deletions jOOQ/src/main/java/org/jooq/RenamedTable.java
Expand Up @@ -51,11 +51,10 @@ class RenamedTable<R extends Record> extends TableImpl<R> {
*/
private static final long serialVersionUID = -309012919785933903L;

RenamedTable(Table<R> delegate, String rename) {
super(rename, delegate.getSchema());
RenamedTable(Schema schema, Table<R> delegate, String rename) {
super(rename, schema);

for (Field<?> field : delegate.fields()) {
for (Field<?> field : delegate.fields())
createField(field.getName(), field.getDataType(), this);
}
}
}
25 changes: 16 additions & 9 deletions jOOQ/src/main/java/org/jooq/SchemaMapping.java
Expand Up @@ -37,6 +37,8 @@
*/
package org.jooq;

import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.schema;
import static org.jooq.tools.StringUtils.isBlank;

import java.io.Serializable;
Expand Down Expand Up @@ -294,11 +296,10 @@ public Schema map(Schema schema) {

Schema result = schema;
if (result != null) {
String schemaName = result.getName();

// [#2089] DefaultSchema has an empty schema name
if (StringUtils.isEmpty(schemaName))
return null;
// [#7498] But we're mapping those names as well
String schemaName = result.getName();

// [#4642] Don't initialise schema mapping if not necessary
if (!mapping().getSchemata().isEmpty()) {
Expand Down Expand Up @@ -337,9 +338,8 @@ else if (s.getInputExpression() != null)

// The configured default schema is mapped to "null". This prevents
// it from being rendered to SQL
if (result.getName().equals(mapping().getDefaultSchema())) {
if (result.getName().equals(mapping().getDefaultSchema()))
result = null;
}
}

return result;
Expand All @@ -362,9 +362,12 @@ public <R extends Record> Table<R> map(Table<R> table) {
// [#1189] Schema can be null in SQLite
// [#2089] DefaultSchema have empty schema names
// [#1186] TODO: replace this by calling table.getQualifiedName()
String schemaName = (schema == null) ? "" : schema.getName();
if (schema == null)
schema = schema(name(""));

String schemaName = schema.getName();
String tableName = result.getName();
String key = (schema == null || StringUtils.isEmpty(schemaName)) ? tableName : (schemaName + "." + tableName);
String key = StringUtils.isEmpty(schemaName) ? tableName : (schemaName + "." + tableName);

// Lazy initialise table mapping
if (!getTables().containsKey(key)) {
Expand All @@ -385,13 +388,17 @@ public <R extends Record> Table<R> map(Table<R> table) {
// Ignore self-mappings and void-mappings
if (!isBlank(t.getOutput()))
if (t.getInput() != null && !t.getOutput().equals(tableName))
result = new RenamedTable<R>(result, t.getOutput());
result = new RenamedTable<R>(map(schema), result, t.getOutput());
else if (t.getInputExpression() != null)
result = new RenamedTable<R>(result, t.getInputExpression().matcher(tableName).replaceAll(t.getOutput()));
result = new RenamedTable<R>(map(schema), result, t.getInputExpression().matcher(tableName).replaceAll(t.getOutput()));

break schemaLoop;
}
}

// [#7498] Even without table mapping configuration, we may still need to map the schema
result = new RenamedTable<R>(map(schema), result, tableName);
break schemaLoop;
}
}

Expand Down
17 changes: 7 additions & 10 deletions jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java
Expand Up @@ -1121,16 +1121,13 @@ private final void toSQLInParam(RenderContext ctx, Parameter<?> parameter, int i
ctx.visit(value);
}

private final void toSQLQualifiedName(RenderContext context) {
Schema mappedSchema = Tools.getMappedSchema(context.configuration(), getSchema());

if (context.qualify()) {
if (mappedSchema != null) {
context.visit(mappedSchema);
context.sql('.');
}

private final void toSQLQualifiedName(RenderContext ctx) {
if (ctx.qualify()) {
Schema mapped = Tools.getMappedSchema(ctx.configuration(), getSchema());

if (mapped != null && !"".equals(mapped.getName()))
ctx.visit(mapped)
.sql('.');



Expand All @@ -1144,7 +1141,7 @@ private final void toSQLQualifiedName(RenderContext context) {

}

context.literal(getName());
ctx.literal(getName());
}

private final void fetchOutParameters(ExecuteContext ctx) throws SQLException {
Expand Down
3 changes: 2 additions & 1 deletion jOOQ/src/main/java/org/jooq/impl/AbstractTable.java
Expand Up @@ -52,6 +52,7 @@
import static org.jooq.JoinType.RIGHT_OUTER_JOIN;
import static org.jooq.JoinType.STRAIGHT_JOIN;
// ...
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.table;
import static org.jooq.impl.DSL.val;
import static org.jooq.impl.Tools.EMPTY_FIELD;
Expand Down Expand Up @@ -388,7 +389,7 @@ public final Catalog getCatalog() {
if (tableschema == null)
tableschema = getQualifiedName().qualified()
? DSL.schema(getQualifiedName().qualifier())
: null;
: DSL.schema(name(""));

return tableschema;
}
Expand Down
4 changes: 3 additions & 1 deletion jOOQ/src/main/java/org/jooq/impl/PackageImpl.java
Expand Up @@ -37,6 +37,8 @@
*/
package org.jooq.impl;

import static org.jooq.impl.DSL.name;

import org.jooq.Catalog;
import org.jooq.Clause;
import org.jooq.Context;
Expand Down Expand Up @@ -79,7 +81,7 @@ public final Schema getSchema() {
if (schema == null)
schema = getQualifiedName().qualified()
? DSL.schema(getQualifiedName().qualifier())
: null;
: DSL.schema(name(""));

return schema;
}
Expand Down
13 changes: 8 additions & 5 deletions jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java
Expand Up @@ -40,6 +40,7 @@

import static org.jooq.Clause.SCHEMA;
import static org.jooq.Clause.SCHEMA_REFERENCE;
import static org.jooq.impl.DSL.name;

import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -100,18 +101,20 @@ public SchemaImpl(Name name, Catalog catalog, Comment comment) {
if (catalog == null)
catalog = getQualifiedName().qualified()
? DSL.catalog(getQualifiedName().qualifier())
: null;
: DSL.catalog(name(""));

return catalog;
}

@Override
public final void accept(Context<?> ctx) {
Catalog mappedCatalog = Tools.getMappedCatalog(ctx.configuration(), getCatalog());
if (ctx.qualifyCatalog()) {
Catalog mappedCatalog = Tools.getMappedCatalog(ctx.configuration(), getCatalog());

if (ctx.qualifyCatalog() && mappedCatalog != null) {
ctx.visit(mappedCatalog);
ctx.sql('.');
if (mappedCatalog != null && !"".equals(mappedCatalog.getName())) {
ctx.visit(mappedCatalog);
ctx.sql('.');
}
}

ctx.visit(getUnqualifiedName());
Expand Down
9 changes: 3 additions & 6 deletions jOOQ/src/main/java/org/jooq/impl/SequenceImpl.java
Expand Up @@ -232,16 +232,13 @@ public final void accept(Context<?> ctx) {
private final void accept0(Context<?> ctx, boolean asStringLiterals) {
Schema mappedSchema = Tools.getMappedSchema(ctx.configuration(), schema);

if (mappedSchema != null && ctx.family() != CUBRID) {
if (asStringLiterals) {
if (mappedSchema != null && !"".equals(mappedSchema.getName()) && ctx.family() != CUBRID)
if (asStringLiterals)
ctx.visit(inline(mappedSchema.getName()))
.sql(", ");
}
else {
else
ctx.visit(mappedSchema)
.sql('.');
}
}

if (asStringLiterals)
ctx.visit(inline(name));
Expand Down
2 changes: 1 addition & 1 deletion jOOQ/src/main/java/org/jooq/impl/TableImpl.java
Expand Up @@ -241,7 +241,7 @@ private void accept0(Context<?> ctx) {
(!NO_SUPPORT_QUALIFIED_TVF_CALLS.contains(ctx.family()) || parameters == null || ctx.declareTables())) {
Schema mappedSchema = Tools.getMappedSchema(ctx.configuration(), getSchema());

if (mappedSchema != null) {
if (mappedSchema != null && !"".equals(mappedSchema.getName())) {
ctx.visit(mappedSchema);
ctx.sql('.');
}
Expand Down
2 changes: 1 addition & 1 deletion jOOQ/src/main/java/org/jooq/impl/Tools.java
Expand Up @@ -2523,7 +2523,7 @@ static final String getMappedUDTName(Configuration configuration, UDTRecord<?> r
Schema mapped = getMappedSchema(configuration, udt.getSchema());
StringBuilder sb = new StringBuilder();

if (mapped != null)
if (mapped != null && !"".equals(mapped.getName()))
sb.append(mapped.getName()).append('.');


Expand Down
2 changes: 1 addition & 1 deletion jOOQ/src/main/java/org/jooq/impl/UDTImpl.java
Expand Up @@ -209,7 +209,7 @@ public final DataType<R> getDataType() {
public final void accept(Context<?> ctx) {
Schema mappedSchema = Tools.getMappedSchema(ctx.configuration(), getSchema());

if (mappedSchema != null)
if (mappedSchema != null && !"".equals(mappedSchema.getName()))
ctx.visit(mappedSchema).sql('.');


Expand Down

0 comments on commit fafe20b

Please sign in to comment.