Skip to content

Support Dialect provided StatementRenderers SPI. #2305

Description

@christophstrobl

A custom Dialect should be able to contribute statement rendering capabilities to allow for more divergent rendering strategies.

SPI outline:

interface StatementRenderer<T extends Visitable, SRC extends StatementRenderContext<T>>{

	Class<T> getStatementType();

	String render(T statement, SRC context);

	interface StatementRenderContext<T> {

	}
}

interface Dialect {

	// ...

	@Nullable
	<T extends Visitable> StatementRenderer<T, StatementRenderContext<T>> statementRenderer(Class<T> type);
}

Usage in custom implementation

public class MyDialect extends AbstractDialect {
    
    @Override
    public <T extends Visitable> StatementRenderer<T, StatementRenderContext<T>> 
            statementRenderer(Class<T> type) {
        
        if (type == Upsert.class) {
            return (StatementRenderer) new MyUpsertRenderer();
        }
        return super.statementRenderer(type);
    }
}
class MyUpsertRenderer implements UpsertStatementRenderer {
    @Override
    public String render(Upsert statement, UpsertRenderContext context) {
        // ...
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions