Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#38: Use EVSCL #41

Merged
merged 1 commit into from
Jun 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions doc/model/diagrams/class/cl_creation_chain_local.plantuml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
@startuml
!pragma layout smetana
!include ../clean.skin
set separator none

title: Creation Chain for Local Virtual Schema

package exasol.evscl <<external>> {
class LocalMetadataReader
class LocalQueryRewriter

}

package exasol.vscl <<external>> {
class QueryRenderer
class RequestDispatcher

url of RequestDispatcher is [[../sequence/seq_handle_request.svg]]
}

package exasol.evsl {
class entry <<function>>
class ExasolAdapter
class QueryRewriterFactory
class MetadataReaderFactory

entry -d-> MetadataReaderFactory : "**1:** create"
entry -r-> QueryRewriterFactory : "**2:** create"
entry -d-> ExasolAdapter : "**3:** create"


url of entry is [[../sequence/seq_entry.svg]]
}

entry --> RequestDispatcher : "**4:** create"
MetadataReaderFactory -d-> LocalMetadataReader : create
QueryRewriterFactory -d-> LocalQueryRewriter : create
LocalQueryRewriter -d-> QueryRenderer : create

@enduml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,7 @@
!include ../clean.skin
set separator none

title: Creation Chain


package exasol.evscl <<external>> {
class LocalMetadataReader
class LocalQueryRewriter
}
title: Creation Chain Remote vs

package exasol.evsl {
class entry <<function>>
Expand All @@ -22,8 +16,8 @@ package exasol.evsl {
entry -d-> MetadataReaderFactory : "**1:** create"
entry -r-> QueryRewriterFactory : "**2:** create"
entry -d-> ExasolAdapter : "**3:** create"
MetadataReaderFactory -r-> RemoteMetadataReader : "create"
QueryRewriterFactory -l-> RemoteQueryRewriter : "create"
MetadataReaderFactory -d-> RemoteMetadataReader : "create"
QueryRewriterFactory -r-> RemoteQueryRewriter : "create"


url of entry is [[../sequence/seq_entry.svg]]
Expand All @@ -37,19 +31,6 @@ package exasol.vscl <<external>> {
}

entry -d-> RequestDispatcher : "**4:** create"
MetadataReaderFactory --> LocalMetadataReader : create
QueryRewriterFactory --> LocalQueryRewriter : create
RemoteQueryRewriter --> QueryRenderer : create
LocalQueryRewriter --> QueryRenderer : create

note as N1
Factories, adapter and dispatcher are always created at the start.

Depending on which type of virtual schema and what request is
used, the factories either produce a local or the remote
variant of the query rewriter and metadata reader.
end note

exasol.vscl -[hidden]d- N1

@enduml
24 changes: 18 additions & 6 deletions doc/model/diagrams/sequence/seq_pushdown.plantuml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ title: Query Push-down

participant RequestDispatcher
participant ExasolAdapter
participant QueryRewriterFactory
participant RemoteQueryRewriter
participant LocalQueryRewriter
participant ImportQueryBuilder
participant QueryRenderer
participant QueryRewriterFactory

activate RequestDispatcher
RequestDispatcher -> ExasolAdapter : push down (request)
Expand All @@ -30,21 +31,30 @@ alt connection provided
ExasolAdapter -> RemoteQueryRewriter : rewrite (query, schema\nadapter notes, involved table[])
activate RemoteQueryRewriter
ref over RemoteQueryRewriter : **[[../activity/act_rewrite.svg rewrite query]]**
create ImportQueryBuilder
RemoteQueryRewriter -> ImportQueryBuilder : new()
activate ImportQueryBuilder
ImportQueryBuilder -->> RemoteQueryRewriter : instance
deactivate ImportQueryBuilder
note over RemoteQueryRewriter, ImportQueryBuilder : Set connection, result column types and query to be wrapped in the import
RemoteQueryRewriter -> ImportQueryBuilder : build()
activate ImportQueryBuilder
ImportQueryBuilder -->> RemoteQueryRewriter : import query
deactivate ImportQueryBuilder
create QueryRenderer
RemoteQueryRewriter -> QueryRenderer : new(query)
RemoteQueryRewriter -> QueryRenderer : new(import query)
activate QueryRenderer
QueryRenderer -->> RemoteQueryRewriter : instance
deactivate QueryRenderer
RemoteQueryRewriter -> QueryRenderer : render ()
activate QueryRenderer
QueryRenderer -->> RemoteQueryRewriter : query : SQL string
deactivate QueryRenderer
RemoteQueryRewriter -> RemoteQueryRewriter : _wrap_in_import (SQL string)
note right : Uses the ""ImportBuilder"".
activate RemoteQueryRewriter
deactivate RemoteQueryRewriter
RemoteQueryRewriter --> ExasolAdapter : query : SQL string
deactivate RemoteQueryRewriter
destroy ImportQueryBuilder
destroy QueryRenderer
destroy RemoteQueryRewriter
else no connection provided
ExasolAdapter -> QueryRewriterFactory : create_rewriter()
activate QueryRewriterFactory
Expand All @@ -66,6 +76,8 @@ else no connection provided
deactivate QueryRenderer
LocalQueryRewriter --> ExasolAdapter : query : SQL string
deactivate LocalQueryRewriter
destroy QueryRenderer
destroy LocalQueryRewriter
end
ExasolAdapter -->> RequestDispatcher : wrapped response
deactivate ExasolAdapter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ deactivate ConnectionReader
ConnectionReader -->> RemotedMetadataReader : host, port, user, password
deactivate ConnectionReader


RemotedMetadataReader -> ExasolDriverLua : read schema details (schema)
activate ExasolDriverLua
ExasolDriverLua -> ExasolDriverLua : connect (TLS options)
Expand Down