module ClickHaskell.Protocol.Client where
import ClickHaskell.Primitive
import ClickHaskell.Protocol.Data (DataPacket)
import ClickHaskell.Protocol.Settings (DbSettings(..))
import Data.Int
import GHC.Generics
import Data.ByteString as BS (null)
data ClientPacket where
Hello :: HelloPacket -> ClientPacket
Query :: QueryPacket -> ClientPacket
Data :: DataPacket -> ClientPacket
Cancel :: ClientPacket
Ping :: ClientPacket
TablesStatusRequest :: ClientPacket
KeepAlive :: ClientPacket
Scalar :: ClientPacket
IgnoredPartUUIDs :: ClientPacket
ReadTaskResponse :: ClientPacket
MergeTreeReadTaskResponse :: ClientPacket
SSHChallengeRequest :: ClientPacket
SSHChallengeResponse :: ClientPacket
deriving ((forall x. ClientPacket -> Rep ClientPacket x)
-> (forall x. Rep ClientPacket x -> ClientPacket)
-> Generic ClientPacket
forall x. Rep ClientPacket x -> ClientPacket
forall x. ClientPacket -> Rep ClientPacket x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ClientPacket -> Rep ClientPacket x
from :: forall x. ClientPacket -> Rep ClientPacket x
$cto :: forall x. Rep ClientPacket x -> ClientPacket
to :: forall x. Rep ClientPacket x -> ClientPacket
Generic)
instance Serializable ClientPacket where
serialize :: ProtocolRevision -> ClientPacket -> Builder
serialize ProtocolRevision
rev ClientPacket
packet = case ClientPacket
packet of
(Hello HelloPacket
p) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
0 Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ProtocolRevision -> HelloPacket -> Builder
forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize ProtocolRevision
rev HelloPacket
p
(Query QueryPacket
p) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
1 Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ProtocolRevision -> QueryPacket -> Builder
forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize ProtocolRevision
rev QueryPacket
p
(Data DataPacket
p) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
2 Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ProtocolRevision -> DataPacket -> Builder
forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize ProtocolRevision
rev DataPacket
p
(ClientPacket
Cancel) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
3
(ClientPacket
Ping) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
4
(ClientPacket
TablesStatusRequest) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
5
(ClientPacket
KeepAlive) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
6
(ClientPacket
Scalar) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
7
(ClientPacket
IgnoredPartUUIDs) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
8
(ClientPacket
ReadTaskResponse) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
9
(ClientPacket
MergeTreeReadTaskResponse) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
10
(ClientPacket
SSHChallengeRequest) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
11
(ClientPacket
SSHChallengeResponse) -> forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev UVarInt
12
deserialize :: ProtocolRevision -> Get ClientPacket
deserialize ProtocolRevision
rev = do
code <- forall chType.
Serializable chType =>
ProtocolRevision -> Get chType
deserialize @UVarInt ProtocolRevision
rev
case code of
UVarInt
0 -> HelloPacket -> ClientPacket
Hello (HelloPacket -> ClientPacket)
-> Get HelloPacket -> Get ClientPacket
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProtocolRevision -> Get HelloPacket
forall chType.
Serializable chType =>
ProtocolRevision -> Get chType
deserialize ProtocolRevision
rev
UVarInt
1 -> QueryPacket -> ClientPacket
Query (QueryPacket -> ClientPacket)
-> Get QueryPacket -> Get ClientPacket
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProtocolRevision -> Get QueryPacket
forall chType.
Serializable chType =>
ProtocolRevision -> Get chType
deserialize ProtocolRevision
rev
UVarInt
2 -> DataPacket -> ClientPacket
Data (DataPacket -> ClientPacket) -> Get DataPacket -> Get ClientPacket
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProtocolRevision -> Get DataPacket
forall chType.
Serializable chType =>
ProtocolRevision -> Get chType
deserialize ProtocolRevision
rev
UVarInt
3 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
Cancel
UVarInt
4 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
Ping
UVarInt
5 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
TablesStatusRequest
UVarInt
6 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
KeepAlive
UVarInt
7 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
Scalar
UVarInt
8 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
IgnoredPartUUIDs
UVarInt
9 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
ReadTaskResponse
UVarInt
10 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
MergeTreeReadTaskResponse
UVarInt
11 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
SSHChallengeRequest
UVarInt
12 -> ClientPacket -> Get ClientPacket
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ClientPacket
SSHChallengeResponse
UVarInt
num -> String -> Get ClientPacket
forall a. String -> Get a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String
"Unknown client packet " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> UVarInt -> String
forall a. Show a => a -> String
show UVarInt
num)
data HelloPacket = MkHelloPacket
{ HelloPacket -> ChString
client_name :: ChString
, HelloPacket -> UVarInt
client_version_major :: UVarInt
, HelloPacket -> UVarInt
client_version_minor :: UVarInt
, HelloPacket -> ProtocolRevision
tcp_protocol_version :: ProtocolRevision
, HelloPacket -> ChString
default_database :: ChString
, HelloPacket -> ChString
user :: ChString
, HelloPacket -> ChString
pass :: ChString
}
deriving ((forall x. HelloPacket -> Rep HelloPacket x)
-> (forall x. Rep HelloPacket x -> HelloPacket)
-> Generic HelloPacket
forall x. Rep HelloPacket x -> HelloPacket
forall x. HelloPacket -> Rep HelloPacket x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. HelloPacket -> Rep HelloPacket x
from :: forall x. HelloPacket -> Rep HelloPacket x
$cto :: forall x. Rep HelloPacket x -> HelloPacket
to :: forall x. Rep HelloPacket x -> HelloPacket
Generic, ProtocolRevision -> Get HelloPacket
ProtocolRevision -> HelloPacket -> Builder
(ProtocolRevision -> HelloPacket -> Builder)
-> (ProtocolRevision -> Get HelloPacket)
-> Serializable HelloPacket
forall chType.
(ProtocolRevision -> chType -> Builder)
-> (ProtocolRevision -> Get chType) -> Serializable chType
$cserialize :: ProtocolRevision -> HelloPacket -> Builder
serialize :: ProtocolRevision -> HelloPacket -> Builder
$cdeserialize :: ProtocolRevision -> Get HelloPacket
deserialize :: ProtocolRevision -> Get HelloPacket
Serializable)
mkHelloPacket :: String -> String -> String -> ProtocolRevision -> ClientPacket
mkHelloPacket :: String -> String -> String -> ProtocolRevision -> ClientPacket
mkHelloPacket String
db String
user String
pass ProtocolRevision
rev =
HelloPacket -> ClientPacket
Hello
MkHelloPacket
{ client_name :: ChString
client_name = ChString
clientName
, client_version_major :: UVarInt
client_version_major = UVarInt
major
, client_version_minor :: UVarInt
client_version_minor = UVarInt
minor
, tcp_protocol_version :: ProtocolRevision
tcp_protocol_version = ProtocolRevision
rev
, default_database :: ChString
default_database = String -> ChString
forall chType userType.
ToChType chType userType =>
userType -> chType
toChType String
db
, user :: ChString
user = String -> ChString
forall chType userType.
ToChType chType userType =>
userType -> chType
toChType String
user
, pass :: ChString
pass = String -> ChString
forall chType userType.
ToChType chType userType =>
userType -> chType
toChType String
pass
}
data Addendum = MkAddendum
{ Addendum
-> SinceRevision ChString DBMS_MIN_PROTOCOL_VERSION_WITH_QUOTA_KEY
quota_key :: ChString `SinceRevision` DBMS_MIN_PROTOCOL_VERSION_WITH_QUOTA_KEY
, Addendum
-> SinceRevision
ChString DBMS_MIN_PROTOCOL_VERSION_WITH_CHUNKED_PACKETS
proto_send_chunked :: ChString `SinceRevision` DBMS_MIN_PROTOCOL_VERSION_WITH_CHUNKED_PACKETS
, Addendum
-> SinceRevision
ChString DBMS_MIN_PROTOCOL_VERSION_WITH_CHUNKED_PACKETS
proto_recv_chunked :: ChString `SinceRevision` DBMS_MIN_PROTOCOL_VERSION_WITH_CHUNKED_PACKETS
, Addendum
-> SinceRevision
ProtocolRevision
DBMS_MIN_REVISION_WITH_VERSIONED_PARALLEL_REPLICAS_PROTOCOL
replicas_version :: ProtocolRevision `SinceRevision` DBMS_MIN_REVISION_WITH_VERSIONED_PARALLEL_REPLICAS_PROTOCOL
}
deriving ((forall x. Addendum -> Rep Addendum x)
-> (forall x. Rep Addendum x -> Addendum) -> Generic Addendum
forall x. Rep Addendum x -> Addendum
forall x. Addendum -> Rep Addendum x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Addendum -> Rep Addendum x
from :: forall x. Addendum -> Rep Addendum x
$cto :: forall x. Rep Addendum x -> Addendum
to :: forall x. Rep Addendum x -> Addendum
Generic, ProtocolRevision -> Get Addendum
ProtocolRevision -> Addendum -> Builder
(ProtocolRevision -> Addendum -> Builder)
-> (ProtocolRevision -> Get Addendum) -> Serializable Addendum
forall chType.
(ProtocolRevision -> chType -> Builder)
-> (ProtocolRevision -> Get chType) -> Serializable chType
$cserialize :: ProtocolRevision -> Addendum -> Builder
serialize :: ProtocolRevision -> Addendum -> Builder
$cdeserialize :: ProtocolRevision -> Get Addendum
deserialize :: ProtocolRevision -> Get Addendum
Serializable)
mkAddendum :: Addendum
mkAddendum :: Addendum
mkAddendum = MkAddendum
{ quota_key :: SinceRevision ChString DBMS_MIN_PROTOCOL_VERSION_WITH_QUOTA_KEY
quota_key = ChString
-> SinceRevision ChString DBMS_MIN_PROTOCOL_VERSION_WITH_QUOTA_KEY
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision ChString
""
, proto_send_chunked :: SinceRevision
ChString DBMS_MIN_PROTOCOL_VERSION_WITH_CHUNKED_PACKETS
proto_send_chunked = ChString
-> SinceRevision
ChString DBMS_MIN_PROTOCOL_VERSION_WITH_CHUNKED_PACKETS
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision ChString
"notchunked"
, proto_recv_chunked :: SinceRevision
ChString DBMS_MIN_PROTOCOL_VERSION_WITH_CHUNKED_PACKETS
proto_recv_chunked = ChString
-> SinceRevision
ChString DBMS_MIN_PROTOCOL_VERSION_WITH_CHUNKED_PACKETS
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision ChString
"notchunked"
, replicas_version :: SinceRevision
ProtocolRevision
DBMS_MIN_REVISION_WITH_VERSIONED_PARALLEL_REPLICAS_PROTOCOL
replicas_version = ProtocolRevision
-> SinceRevision
ProtocolRevision
DBMS_MIN_REVISION_WITH_VERSIONED_PARALLEL_REPLICAS_PROTOCOL
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision (ProtocolRevision
-> SinceRevision
ProtocolRevision
DBMS_MIN_REVISION_WITH_VERSIONED_PARALLEL_REPLICAS_PROTOCOL)
-> ProtocolRevision
-> SinceRevision
ProtocolRevision
DBMS_MIN_REVISION_WITH_VERSIONED_PARALLEL_REPLICAS_PROTOCOL
forall a b. (a -> b) -> a -> b
$ forall (nat :: Nat). KnownNat nat => ProtocolRevision
mkRev @DBMS_PARALLEL_REPLICAS_PROTOCOL_VERSION
}
data QueryPacket = MkQueryPacket
{ QueryPacket -> ChString
query_id :: ChString
, QueryPacket
-> SinceRevision ClientInfo DBMS_MIN_REVISION_WITH_CLIENT_INFO
client_info :: ClientInfo `SinceRevision` DBMS_MIN_REVISION_WITH_CLIENT_INFO
, QueryPacket -> DbSettings
settings :: DbSettings
, QueryPacket
-> SinceRevision
UVarInt
DBMS_MIN_PROTOCOL_VERSION_WITH_INTERSERVER_EXTERNALLY_GRANTED_ROLES
external_roles :: UVarInt `SinceRevision` DBMS_MIN_PROTOCOL_VERSION_WITH_INTERSERVER_EXTERNALLY_GRANTED_ROLES
, QueryPacket
-> SinceRevision ChString DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET
interserver_secret :: ChString `SinceRevision` DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET
, QueryPacket -> QueryStage
query_stage :: QueryStage
, QueryPacket -> UVarInt
compression :: UVarInt
, QueryPacket -> ChString
query :: ChString
, QueryPacket
-> SinceRevision
QueryParameters DBMS_MIN_PROTOCOL_VERSION_WITH_PARAMETERS
parameters :: QueryParameters `SinceRevision` DBMS_MIN_PROTOCOL_VERSION_WITH_PARAMETERS
}
deriving ((forall x. QueryPacket -> Rep QueryPacket x)
-> (forall x. Rep QueryPacket x -> QueryPacket)
-> Generic QueryPacket
forall x. Rep QueryPacket x -> QueryPacket
forall x. QueryPacket -> Rep QueryPacket x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. QueryPacket -> Rep QueryPacket x
from :: forall x. QueryPacket -> Rep QueryPacket x
$cto :: forall x. Rep QueryPacket x -> QueryPacket
to :: forall x. Rep QueryPacket x -> QueryPacket
Generic, ProtocolRevision -> Get QueryPacket
ProtocolRevision -> QueryPacket -> Builder
(ProtocolRevision -> QueryPacket -> Builder)
-> (ProtocolRevision -> Get QueryPacket)
-> Serializable QueryPacket
forall chType.
(ProtocolRevision -> chType -> Builder)
-> (ProtocolRevision -> Get chType) -> Serializable chType
$cserialize :: ProtocolRevision -> QueryPacket -> Builder
serialize :: ProtocolRevision -> QueryPacket -> Builder
$cdeserialize :: ProtocolRevision -> Get QueryPacket
deserialize :: ProtocolRevision -> Get QueryPacket
Serializable)
data QueryPacketArgs = MkQueryPacketArgs
{ QueryPacketArgs -> ChString
initial_user :: ChString
, QueryPacketArgs -> ChString
hostname :: ChString
, QueryPacketArgs -> ChString
os_user :: ChString
, QueryPacketArgs -> ChString
query :: ChString
, QueryPacketArgs -> DbSettings
settings :: DbSettings
, QueryPacketArgs -> ProtocolRevision
revision :: ProtocolRevision
}
mkQueryPacket :: QueryPacketArgs -> ClientPacket
mkQueryPacket :: QueryPacketArgs -> ClientPacket
mkQueryPacket MkQueryPacketArgs{ChString
initial_user :: QueryPacketArgs -> ChString
initial_user :: ChString
initial_user, ChString
os_user :: QueryPacketArgs -> ChString
os_user :: ChString
os_user, ChString
hostname :: QueryPacketArgs -> ChString
hostname :: ChString
hostname, ChString
query :: QueryPacketArgs -> ChString
query :: ChString
query, DbSettings
settings :: QueryPacketArgs -> DbSettings
settings :: DbSettings
settings, ProtocolRevision
revision :: QueryPacketArgs -> ProtocolRevision
revision :: ProtocolRevision
revision} =
QueryPacket -> ClientPacket
Query
MkQueryPacket
{ query_id :: ChString
query_id = ChString
""
, client_info :: SinceRevision ClientInfo DBMS_MIN_REVISION_WITH_CLIENT_INFO
client_info = ClientInfo
-> SinceRevision ClientInfo DBMS_MIN_REVISION_WITH_CLIENT_INFO
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision MkClientInfo
{ query_kind :: QueryKind
query_kind = QueryKind
InitialQuery
, ChString
initial_user :: ChString
initial_user :: ChString
initial_user
, initial_query_id :: ChString
initial_query_id = ChString
""
, initial_adress :: ChString
initial_adress = ChString
"0.0.0.0:0"
, initial_time :: SinceRevision
Int64 DBMS_MIN_PROTOCOL_VERSION_WITH_INITIAL_QUERY_START_TIME
initial_time = Int64
-> SinceRevision
Int64 DBMS_MIN_PROTOCOL_VERSION_WITH_INITIAL_QUERY_START_TIME
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision Int64
0
, interface_type :: UInt8
interface_type = UInt8
1
, ChString
os_user :: ChString
os_user :: ChString
os_user
, ChString
hostname :: ChString
hostname :: ChString
hostname
, client_name :: ChString
client_name = ChString
clientName
, client_version_major :: UVarInt
client_version_major = UVarInt
major
, client_version_minor :: UVarInt
client_version_minor = UVarInt
minor
, client_revision :: ProtocolRevision
client_revision = ProtocolRevision
revision
, quota_key :: SinceRevision
ChString DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO
quota_key = ChString
-> SinceRevision
ChString DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision ChString
""
, distrubuted_depth :: SinceRevision
UVarInt DBMS_MIN_PROTOCOL_VERSION_WITH_DISTRIBUTED_DEPTH
distrubuted_depth = UVarInt
-> SinceRevision
UVarInt DBMS_MIN_PROTOCOL_VERSION_WITH_DISTRIBUTED_DEPTH
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision UVarInt
0
, client_version_patch :: SinceRevision UVarInt DBMS_MIN_REVISION_WITH_VERSION_PATCH
client_version_patch = UVarInt
-> SinceRevision UVarInt DBMS_MIN_REVISION_WITH_VERSION_PATCH
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision UVarInt
patch
, open_telemetry :: SinceRevision UInt8 DBMS_MIN_REVISION_WITH_OPENTELEMETRY
open_telemetry = UInt8 -> SinceRevision UInt8 DBMS_MIN_REVISION_WITH_OPENTELEMETRY
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision UInt8
0
, collaborate_with_initiator :: SinceRevision UVarInt DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
collaborate_with_initiator = UVarInt
-> SinceRevision UVarInt DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision UVarInt
0
, count_participating_replicas :: SinceRevision UVarInt DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
count_participating_replicas = UVarInt
-> SinceRevision UVarInt DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision UVarInt
0
, number_of_current_replica :: SinceRevision UVarInt DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
number_of_current_replica = UVarInt
-> SinceRevision UVarInt DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision UVarInt
0
, script_query_number :: SinceRevision UVarInt DBMS_MIN_REVISION_WITH_QUERY_AND_LINE_NUMBERS
script_query_number = UVarInt
-> SinceRevision
UVarInt DBMS_MIN_REVISION_WITH_QUERY_AND_LINE_NUMBERS
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision UVarInt
0
, script_line_number :: SinceRevision UVarInt DBMS_MIN_REVISION_WITH_QUERY_AND_LINE_NUMBERS
script_line_number = UVarInt
-> SinceRevision
UVarInt DBMS_MIN_REVISION_WITH_QUERY_AND_LINE_NUMBERS
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision UVarInt
0
, jwt :: SinceRevision Jwt DBMS_MIN_REVISON_WITH_JWT_IN_INTERSERVER
jwt = Jwt -> SinceRevision Jwt DBMS_MIN_REVISON_WITH_JWT_IN_INTERSERVER
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision (ChString -> Jwt
MkJwt ChString
"")
}
, DbSettings
settings :: DbSettings
settings :: DbSettings
settings
, interserver_secret :: SinceRevision ChString DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET
interserver_secret = ChString
-> SinceRevision ChString DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision ChString
""
, query_stage :: QueryStage
query_stage = QueryStage
Complete
, compression :: UVarInt
compression = UVarInt
0
, ChString
query :: ChString
query :: ChString
query
, parameters :: SinceRevision
QueryParameters DBMS_MIN_PROTOCOL_VERSION_WITH_PARAMETERS
parameters = QueryParameters
-> SinceRevision
QueryParameters DBMS_MIN_PROTOCOL_VERSION_WITH_PARAMETERS
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision QueryParameters
MkQueryParameters
, external_roles :: SinceRevision
UVarInt
DBMS_MIN_PROTOCOL_VERSION_WITH_INTERSERVER_EXTERNALLY_GRANTED_ROLES
external_roles = UVarInt
-> SinceRevision
UVarInt
DBMS_MIN_PROTOCOL_VERSION_WITH_INTERSERVER_EXTERNALLY_GRANTED_ROLES
forall (revisionNumber :: Nat) b a.
a -> Revisioned revisionNumber b a
AfterRevision UVarInt
0
}
data QueryParameters = MkQueryParameters
instance Serializable QueryParameters where
serialize :: ProtocolRevision -> QueryParameters -> Builder
serialize ProtocolRevision
rev QueryParameters
_ =
forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @ChString ProtocolRevision
rev ChString
""
deserialize :: ProtocolRevision -> Get QueryParameters
deserialize ProtocolRevision
_rev =
String -> Get QueryParameters
forall a. String -> Get a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"QueryParameters reading unimplemented"
data QueryStage
= FetchColumns | WithMergeableState | Complete
| WithMergeableStateAfterAggregation
| WithMergeableStateAfterAggregationAndLimit
deriving (Int -> QueryStage
QueryStage -> Int
QueryStage -> [QueryStage]
QueryStage -> QueryStage
QueryStage -> QueryStage -> [QueryStage]
QueryStage -> QueryStage -> QueryStage -> [QueryStage]
(QueryStage -> QueryStage)
-> (QueryStage -> QueryStage)
-> (Int -> QueryStage)
-> (QueryStage -> Int)
-> (QueryStage -> [QueryStage])
-> (QueryStage -> QueryStage -> [QueryStage])
-> (QueryStage -> QueryStage -> [QueryStage])
-> (QueryStage -> QueryStage -> QueryStage -> [QueryStage])
-> Enum QueryStage
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: QueryStage -> QueryStage
succ :: QueryStage -> QueryStage
$cpred :: QueryStage -> QueryStage
pred :: QueryStage -> QueryStage
$ctoEnum :: Int -> QueryStage
toEnum :: Int -> QueryStage
$cfromEnum :: QueryStage -> Int
fromEnum :: QueryStage -> Int
$cenumFrom :: QueryStage -> [QueryStage]
enumFrom :: QueryStage -> [QueryStage]
$cenumFromThen :: QueryStage -> QueryStage -> [QueryStage]
enumFromThen :: QueryStage -> QueryStage -> [QueryStage]
$cenumFromTo :: QueryStage -> QueryStage -> [QueryStage]
enumFromTo :: QueryStage -> QueryStage -> [QueryStage]
$cenumFromThenTo :: QueryStage -> QueryStage -> QueryStage -> [QueryStage]
enumFromThenTo :: QueryStage -> QueryStage -> QueryStage -> [QueryStage]
Enum)
instance Serializable QueryStage where
serialize :: ProtocolRevision -> QueryStage -> Builder
serialize ProtocolRevision
rev = forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UVarInt ProtocolRevision
rev (UVarInt -> Builder)
-> (QueryStage -> UVarInt) -> QueryStage -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> UVarInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> UVarInt) -> (QueryStage -> Int) -> QueryStage -> UVarInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QueryStage -> Int
forall a. Enum a => a -> Int
fromEnum
deserialize :: ProtocolRevision -> Get QueryStage
deserialize ProtocolRevision
rev = do
queryStageCode <- forall chType.
Serializable chType =>
ProtocolRevision -> Get chType
deserialize @UVarInt ProtocolRevision
rev
case queryStageCode of
UVarInt
0 -> QueryStage -> Get QueryStage
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure QueryStage
FetchColumns
UVarInt
1 -> QueryStage -> Get QueryStage
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure QueryStage
WithMergeableState
UVarInt
2 -> QueryStage -> Get QueryStage
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure QueryStage
Complete
UVarInt
3 -> QueryStage -> Get QueryStage
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure QueryStage
WithMergeableStateAfterAggregation
UVarInt
4 -> QueryStage -> Get QueryStage
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure QueryStage
WithMergeableStateAfterAggregationAndLimit
UVarInt
num -> String -> Get QueryStage
forall a. String -> Get a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String
"Unknown QueryStage " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> UVarInt -> String
forall a. Show a => a -> String
show UVarInt
num)
data ClientInfo = MkClientInfo
{ ClientInfo -> QueryKind
query_kind :: QueryKind
, ClientInfo -> ChString
initial_user :: ChString
, ClientInfo -> ChString
initial_query_id :: ChString
, ClientInfo -> ChString
initial_adress :: ChString
, ClientInfo
-> SinceRevision
Int64 DBMS_MIN_PROTOCOL_VERSION_WITH_INITIAL_QUERY_START_TIME
initial_time :: Int64 `SinceRevision` DBMS_MIN_PROTOCOL_VERSION_WITH_INITIAL_QUERY_START_TIME
, ClientInfo -> UInt8
interface_type :: UInt8
, ClientInfo -> ChString
os_user :: ChString
, ClientInfo -> ChString
hostname :: ChString
, ClientInfo -> ChString
client_name :: ChString
, ClientInfo -> UVarInt
client_version_major :: UVarInt
, ClientInfo -> UVarInt
client_version_minor :: UVarInt
, ClientInfo -> ProtocolRevision
client_revision :: ProtocolRevision
, ClientInfo
-> SinceRevision
ChString DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO
quota_key :: ChString `SinceRevision` DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO
, ClientInfo
-> SinceRevision
UVarInt DBMS_MIN_PROTOCOL_VERSION_WITH_DISTRIBUTED_DEPTH
distrubuted_depth :: UVarInt `SinceRevision` DBMS_MIN_PROTOCOL_VERSION_WITH_DISTRIBUTED_DEPTH
, ClientInfo
-> SinceRevision UVarInt DBMS_MIN_REVISION_WITH_VERSION_PATCH
client_version_patch :: UVarInt `SinceRevision` DBMS_MIN_REVISION_WITH_VERSION_PATCH
, ClientInfo
-> SinceRevision UInt8 DBMS_MIN_REVISION_WITH_OPENTELEMETRY
open_telemetry :: UInt8 `SinceRevision` DBMS_MIN_REVISION_WITH_OPENTELEMETRY
, ClientInfo
-> SinceRevision UVarInt DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
collaborate_with_initiator :: UVarInt `SinceRevision` DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
, ClientInfo
-> SinceRevision UVarInt DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
count_participating_replicas :: UVarInt `SinceRevision` DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
, ClientInfo
-> SinceRevision UVarInt DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
number_of_current_replica :: UVarInt `SinceRevision` DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS
, ClientInfo
-> SinceRevision
UVarInt DBMS_MIN_REVISION_WITH_QUERY_AND_LINE_NUMBERS
script_query_number :: UVarInt `SinceRevision` DBMS_MIN_REVISION_WITH_QUERY_AND_LINE_NUMBERS
, ClientInfo
-> SinceRevision
UVarInt DBMS_MIN_REVISION_WITH_QUERY_AND_LINE_NUMBERS
script_line_number :: UVarInt `SinceRevision` DBMS_MIN_REVISION_WITH_QUERY_AND_LINE_NUMBERS
, ClientInfo
-> SinceRevision Jwt DBMS_MIN_REVISON_WITH_JWT_IN_INTERSERVER
jwt :: Jwt `SinceRevision` DBMS_MIN_REVISON_WITH_JWT_IN_INTERSERVER
}
deriving ((forall x. ClientInfo -> Rep ClientInfo x)
-> (forall x. Rep ClientInfo x -> ClientInfo) -> Generic ClientInfo
forall x. Rep ClientInfo x -> ClientInfo
forall x. ClientInfo -> Rep ClientInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ClientInfo -> Rep ClientInfo x
from :: forall x. ClientInfo -> Rep ClientInfo x
$cto :: forall x. Rep ClientInfo x -> ClientInfo
to :: forall x. Rep ClientInfo x -> ClientInfo
Generic, ProtocolRevision -> Get ClientInfo
ProtocolRevision -> ClientInfo -> Builder
(ProtocolRevision -> ClientInfo -> Builder)
-> (ProtocolRevision -> Get ClientInfo) -> Serializable ClientInfo
forall chType.
(ProtocolRevision -> chType -> Builder)
-> (ProtocolRevision -> Get chType) -> Serializable chType
$cserialize :: ProtocolRevision -> ClientInfo -> Builder
serialize :: ProtocolRevision -> ClientInfo -> Builder
$cdeserialize :: ProtocolRevision -> Get ClientInfo
deserialize :: ProtocolRevision -> Get ClientInfo
Serializable)
data QueryKind = NoQuery | InitialQuery | SecondaryQuery
instance Serializable QueryKind where
serialize :: ProtocolRevision -> QueryKind -> Builder
serialize ProtocolRevision
rev QueryKind
kind = forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UInt8 ProtocolRevision
rev (UInt8 -> Builder) -> UInt8 -> Builder
forall a b. (a -> b) -> a -> b
$
case QueryKind
kind of
QueryKind
NoQuery -> UInt8
1
QueryKind
InitialQuery -> UInt8
2
QueryKind
SecondaryQuery -> UInt8
3
deserialize :: ProtocolRevision -> Get QueryKind
deserialize ProtocolRevision
rev = do
kindCode <- forall chType.
Serializable chType =>
ProtocolRevision -> Get chType
deserialize @UInt8 ProtocolRevision
rev
case kindCode of
UInt8
1 -> QueryKind -> Get QueryKind
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure QueryKind
NoQuery
UInt8
2 -> QueryKind -> Get QueryKind
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure QueryKind
InitialQuery
UInt8
3 -> QueryKind -> Get QueryKind
forall a. a -> Get a
forall (f :: * -> *) a. Applicative f => a -> f a
pure QueryKind
SecondaryQuery
UInt8
num -> String -> Get QueryKind
forall a. String -> Get a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String
"Unknown QueryKind " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> UInt8 -> String
forall a. Show a => a -> String
show UInt8
num)
data Jwt = MkJwt ChString
instance Serializable Jwt where
serialize :: ProtocolRevision -> Jwt -> Builder
serialize ProtocolRevision
rev (MkJwt str :: ChString
str@(MkChString ByteString
bs)) =
if Bool -> Bool
not (ByteString -> Bool
BS.null ByteString
bs)
then forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UInt8 ProtocolRevision
rev UInt8
1 Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ProtocolRevision -> ChString -> Builder
forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize ProtocolRevision
rev ChString
str
else forall chType.
Serializable chType =>
ProtocolRevision -> chType -> Builder
serialize @UInt8 ProtocolRevision
rev UInt8
0
deserialize :: ProtocolRevision -> Get Jwt
deserialize ProtocolRevision
rev = do
has_jwt <- forall chType.
Serializable chType =>
ProtocolRevision -> Get chType
deserialize @UInt8 ProtocolRevision
rev
if has_jwt == 1
then MkJwt <$> deserialize rev
else pure $ MkJwt ""