pgdog.git / summary / log / commit / refs
commit 2cdfdfe807471bd08820e172b68f035403dd070b
Author: Lev Kokotov <lev.kokotov@gmail.com>
Date: Sun Jan 05 09:06:02 2025 +0000
move
pgdog/Cargo.toml | 0
pgdog/LICENSE | 0
pgdog/src}/admin/backend.rs | 2 +-
pgdog/src}/admin/error.rs | 0
pgdog/src}/admin/mod.rs | 0
pgdog/src}/admin/parser.rs | 0
pgdog/src}/admin/pause.rs | 0
pgdog/src}/admin/prelude.rs | 0
pgdog/src}/admin/reconnect.rs | 0
pgdog/src}/auth/mod.rs | 0
pgdog/src}/auth/scram/mod.rs | 0
pgdog/src}/backend/databases.rs | 0
pgdog/src}/backend/error.rs | 0
pgdog/src}/backend/mod.rs | 0
pgdog/src}/backend/pool/address.rs | 0
pgdog/src}/backend/pool/ban.rs | 0
pgdog/src}/backend/pool/cluster.rs | 0
pgdog/src}/backend/pool/config.rs | 0
pgdog/src}/backend/pool/connection.rs | 2 +-
pgdog/src}/backend/pool/error.rs | 2 +-
pgdog/src}/backend/pool/guard.rs | 0
pgdog/src}/backend/pool/healthcheck.rs | 0
pgdog/src}/backend/pool/inner.rs | 0
pgdog/src}/backend/pool/mod.rs | 0
pgdog/src}/backend/pool/monitor.rs | 26 ++++-
pgdog/src}/backend/pool/pool.rs | 2 +-
pgdog/src}/backend/pool/replicas.rs | 4 +-
pgdog/src}/backend/pool/shard.rs | 0
pgdog/src}/backend/pool/stats.rs | 0
pgdog/src}/backend/server.rs | 0
pgdog/src}/channel.rs | 0
pgdog/src}/config/error.rs | 0
pgdog/src}/config/mod.rs | 0
pgdog/src}/frontend/buffer.rs | 0
pgdog/src}/frontend/client.rs | 0
pgdog/src}/frontend/error.rs | 0
pgdog/src}/frontend/listener.rs | 0
pgdog/src}/frontend/mod.rs | 1 +
pgdog/src/frontend/router/mod.rs | 3 +
pgdog/src/frontend/router/parser/error.rs | 10 ++
pgdog/src/frontend/router/parser/lexer.rs | 129 +++++++++++++++++++++
pgdog/src/frontend/router/parser/mod.rs | 9 ++
pgdog/src/frontend/router/parser/select.rs | 0
pgdog/src/frontend/router/parser/tokens.rs | 40 +++++++
pgdog/src}/main.rs | 0
pgdog/src}/net/bidirectional.rs | 0
pgdog/src}/net/error.rs | 0
pgdog/src}/net/messages/auth/mod.rs | 0
pgdog/src}/net/messages/backend_key.rs | 0
.../src}/net/messages/command_complete.rs | 0
pgdog/src}/net/messages/error_response.rs | 0
pgdog/src}/net/messages/hello.rs | 0
pgdog/src}/net/messages/mod.rs | 0
.../src}/net/messages/parameter_status.rs | 0
pgdog/src/net/messages/parse.rs | 59 ++++++++++
pgdog/src}/net/messages/payload.rs | 0
pgdog/src}/net/messages/prelude.rs | 0
pgdog/src}/net/messages/query.rs | 0
pgdog/src}/net/messages/rfq.rs | 0
pgdog/src}/net/messages/terminate.rs | 0
pgdog/src}/net/mod.rs | 0
pgdog/src}/net/parameter.rs | 0
pgdog/src}/net/stream.rs | 0
pgdog/src}/net/tls.rs | 0
pgdog/src}/plugin.rs | 0
pgdog/src}/state.rs | 0
pgdog/src}/stats/mod.rs | 0
pgdog/tests}/cert.pem | 0
pgdog/tests}/key.pem | 0
pgdog/tests}/pgbouncer.ini | 0
pgdog/tests}/userlist.txt | 0
src/net/messages/parse.rs | 7 --
72 files changed, 280 insertions(+), 16 deletions(-)
diff --git a/Cargo.toml b/pgdog/Cargo.toml
similarity index 100%
rename from Cargo.toml
rename to pgdog/Cargo.toml
diff --git a/LICENSE b/pgdog/LICENSE
similarity index 100%
rename from LICENSE
rename to pgdog/LICENSE
diff --git a/src/admin/backend.rs b/pgdog/src/admin/backend.rs
similarity index 98%
rename from src/admin/backend.rs
rename to pgdog/src/admin/backend.rs
index 1eaa9602..03414def 100644
--- a/src/admin/backend.rs
+++ b/pgdog/src/admin/backend.rs
@@ -10,7 +10,7 @@ use crate::net::messages::{FromBytes, Protocol, Query, ReadyForQuery};
use super::parser::Parser;
use super::prelude::Message;
-use super::{Command, Error};
+use super::Error;
/// Admin backend.
pub struct Backend {
diff --git a/src/admin/error.rs b/pgdog/src/admin/error.rs
similarity index 100%
rename from src/admin/error.rs
rename to pgdog/src/admin/error.rs
diff --git a/src/admin/mod.rs b/pgdog/src/admin/mod.rs
similarity index 100%
rename from src/admin/mod.rs
rename to pgdog/src/admin/mod.rs
diff --git a/src/admin/parser.rs b/pgdog/src/admin/parser.rs
similarity index 100%
rename from src/admin/parser.rs
rename to pgdog/src/admin/parser.rs
diff --git a/src/admin/pause.rs b/pgdog/src/admin/pause.rs
similarity index 100%
rename from src/admin/pause.rs
rename to pgdog/src/admin/pause.rs
diff --git a/src/admin/prelude.rs b/pgdog/src/admin/prelude.rs
similarity index 100%
rename from src/admin/prelude.rs
rename to pgdog/src/admin/prelude.rs
diff --git a/src/admin/reconnect.rs b/pgdog/src/admin/reconnect.rs
similarity index 100%
rename from src/admin/reconnect.rs
rename to pgdog/src/admin/reconnect.rs
diff --git a/src/auth/mod.rs b/pgdog/src/auth/mod.rs
similarity index 100%
rename from src/auth/mod.rs
rename to pgdog/src/auth/mod.rs
diff --git a/src/auth/scram/mod.rs b/pgdog/src/auth/scram/mod.rs
similarity index 100%
rename from src/auth/scram/mod.rs
rename to pgdog/src/auth/scram/mod.rs
diff --git a/src/backend/databases.rs b/pgdog/src/backend/databases.rs
similarity index 100%
rename from src/backend/databases.rs
rename to pgdog/src/backend/databases.rs
diff --git a/src/backend/error.rs b/pgdog/src/backend/error.rs
similarity index 100%
rename from src/backend/error.rs
rename to pgdog/src/backend/error.rs
diff --git a/src/backend/mod.rs b/pgdog/src/backend/mod.rs
similarity index 100%
rename from src/backend/mod.rs
rename to pgdog/src/backend/mod.rs
diff --git a/src/backend/pool/address.rs b/pgdog/src/backend/pool/address.rs
similarity index 100%
rename from src/backend/pool/address.rs
rename to pgdog/src/backend/pool/address.rs
diff --git a/src/backend/pool/ban.rs b/pgdog/src/backend/pool/ban.rs
similarity index 100%
rename from src/backend/pool/ban.rs
rename to pgdog/src/backend/pool/ban.rs
diff --git a/src/backend/pool/cluster.rs b/pgdog/src/backend/pool/cluster.rs
similarity index 100%
rename from src/backend/pool/cluster.rs
rename to pgdog/src/backend/pool/cluster.rs
diff --git a/src/backend/pool/config.rs b/pgdog/src/backend/pool/config.rs
similarity index 100%
rename from src/backend/pool/config.rs
rename to pgdog/src/backend/pool/config.rs
diff --git a/src/backend/pool/connection.rs b/pgdog/src/backend/pool/connection.rs
similarity index 98%
rename from src/backend/pool/connection.rs
rename to pgdog/src/backend/pool/connection.rs
index 50801f80..b6b7eebc 100644
--- a/src/backend/pool/connection.rs
+++ b/pgdog/src/backend/pool/connection.rs
@@ -52,7 +52,7 @@ impl Connection {
if self.server.is_none() && self.admin.is_none() {
match self.try_conn(id).await {
Ok(()) => (),
- Err(Error::Pool(super::Error::ShutDown)) => {
+ Err(Error::Pool(super::Error::Offline)) => {
self.reload()?;
return Ok(self.try_conn(id).await?);
}
diff --git a/src/backend/pool/error.rs b/pgdog/src/backend/pool/error.rs
similarity index 97%
rename from src/backend/pool/error.rs
rename to pgdog/src/backend/pool/error.rs
index cd658a5e..67bdbfa5 100644
--- a/src/backend/pool/error.rs
+++ b/pgdog/src/backend/pool/error.rs
@@ -28,5 +28,5 @@ pub enum Error {
HealtcheckError,
#[error("pool is shut down")]
- ShutDown,
+ Offline,
}
diff --git a/src/backend/pool/guard.rs b/pgdog/src/backend/pool/guard.rs
similarity index 100%
rename from src/backend/pool/guard.rs
rename to pgdog/src/backend/pool/guard.rs
diff --git a/src/backend/pool/healthcheck.rs b/pgdog/src/backend/pool/healthcheck.rs
similarity index 100%
rename from src/backend/pool/healthcheck.rs
rename to pgdog/src/backend/pool/healthcheck.rs
diff --git a/src/backend/pool/inner.rs b/pgdog/src/backend/pool/inner.rs
similarity index 100%
rename from src/backend/pool/inner.rs
rename to pgdog/src/backend/pool/inner.rs
diff --git a/src/backend/pool/mod.rs b/pgdog/src/backend/pool/mod.rs
similarity index 100%
rename from src/backend/pool/mod.rs
rename to pgdog/src/backend/pool/mod.rs
diff --git a/src/backend/pool/monitor.rs b/pgdog/src/backend/pool/monitor.rs
similarity index 91%
rename from src/backend/pool/monitor.rs
rename to pgdog/src/backend/pool/monitor.rs
index b243878e..526b5f0c 100644
--- a/src/backend/pool/monitor.rs
+++ b/pgdog/src/backend/pool/monitor.rs
@@ -52,6 +52,7 @@ impl Monitor {
connect_timeout,
paused,
banned,
+ online,
) = {
let guard = self.pool.lock();
@@ -61,9 +62,14 @@ impl Monitor {
guard.config().connect_timeout(),
guard.paused,
guard.banned(),
+ guard.online,
)
};
+ if !online {
+ break;
+ }
+
// If the pool is paused, don't open new connections.
if paused {
continue;
@@ -103,9 +109,19 @@ impl Monitor {
let mut unbanned = false;
select! {
_ = tick.tick() => {
- // Skip healtcheck if offline or paused.
- if !pool.available() {
- continue;
+ {
+ let guard = pool.lock();
+
+ // Pool is offline, exit.
+ if !guard.online {
+ break;
+ }
+
+ // Pool is paused, skip healtcheck.
+ if guard.paused {
+ continue;
+ }
+
}
if Self::healthcheck(&pool).await.is_ok() {
@@ -146,6 +162,10 @@ impl Monitor {
let mut guard = pool.lock();
+ if !guard.online {
+ break;
+ }
+
guard.close_idle(now);
guard.close_old(now);
let unbanned = guard.check_ban(now);
diff --git a/src/backend/pool/pool.rs b/pgdog/src/backend/pool/pool.rs
similarity index 99%
rename from src/backend/pool/pool.rs
rename to pgdog/src/backend/pool/pool.rs
index 784287b8..e218b6e6 100644
--- a/src/backend/pool/pool.rs
+++ b/pgdog/src/backend/pool/pool.rs
@@ -134,7 +134,7 @@ impl Pool {
}
if !guard.online {
- return Err(Error::ShutDown);
+ return Err(Error::Offline);
}
let conn = if let Some(server) = guard.conns.pop_back() {
diff --git a/src/backend/pool/replicas.rs b/pgdog/src/backend/pool/replicas.rs
similarity index 97%
rename from src/backend/pool/replicas.rs
rename to pgdog/src/backend/pool/replicas.rs
index f4618130..84775555 100644
--- a/src/backend/pool/replicas.rs
+++ b/pgdog/src/backend/pool/replicas.rs
@@ -92,7 +92,7 @@ impl Replicas {
banned += 1;
continue;
}
- Err(Error::ShutDown) => continue,
+ Err(Error::Offline) => continue,
Err(err) => {
error!("{} [{}]", err, candidate.addr());
}
@@ -106,6 +106,6 @@ impl Replicas {
}
}
- Err(Error::ShutDown)
+ Err(Error::Offline)
}
}
diff --git a/src/backend/pool/shard.rs b/pgdog/src/backend/pool/shard.rs
similarity index 100%
rename from src/backend/pool/shard.rs
rename to pgdog/src/backend/pool/shard.rs
diff --git a/src/backend/pool/stats.rs b/pgdog/src/backend/pool/stats.rs
similarity index 100%
rename from src/backend/pool/stats.rs
rename to pgdog/src/backend/pool/stats.rs
diff --git a/src/backend/server.rs b/pgdog/src/backend/server.rs
similarity index 100%
rename from src/backend/server.rs
rename to pgdog/src/backend/server.rs
diff --git a/src/channel.rs b/pgdog/src/channel.rs
similarity index 100%
rename from src/channel.rs
rename to pgdog/src/channel.rs
diff --git a/src/config/error.rs b/pgdog/src/config/error.rs
similarity index 100%
rename from src/config/error.rs
rename to pgdog/src/config/error.rs
diff --git a/src/config/mod.rs b/pgdog/src/config/mod.rs
similarity index 100%
rename from src/config/mod.rs
rename to pgdog/src/config/mod.rs
diff --git a/src/frontend/buffer.rs b/pgdog/src/frontend/buffer.rs
similarity index 100%
rename from src/frontend/buffer.rs
rename to pgdog/src/frontend/buffer.rs
diff --git a/src/frontend/client.rs b/pgdog/src/frontend/client.rs
similarity index 100%
rename from src/frontend/client.rs
rename to pgdog/src/frontend/client.rs
diff --git a/src/frontend/error.rs b/pgdog/src/frontend/error.rs
similarity index 100%
rename from src/frontend/error.rs
rename to pgdog/src/frontend/error.rs
diff --git a/src/frontend/listener.rs b/pgdog/src/frontend/listener.rs
similarity index 100%
rename from src/frontend/listener.rs
rename to pgdog/src/frontend/listener.rs
diff --git a/src/frontend/mod.rs b/pgdog/src/frontend/mod.rs
similarity index 92%
rename from src/frontend/mod.rs
rename to pgdog/src/frontend/mod.rs
index a340eb56..025edca4 100644
--- a/src/frontend/mod.rs
+++ b/pgdog/src/frontend/mod.rs
@@ -4,6 +4,7 @@ pub mod buffer;
pub mod client;
pub mod error;
pub mod listener;
+pub mod router;
pub use buffer::Buffer;
pub use client::Client;
diff --git a/pgdog/src/frontend/router/mod.rs b/pgdog/src/frontend/router/mod.rs
new file mode 100644
index 00000000..80a98eb2
--- /dev/null
+++ b/pgdog/src/frontend/router/mod.rs
@@ -0,0 +1,3 @@
+//! Query router.
+
+pub mod parser;
diff --git a/pgdog/src/frontend/router/parser/error.rs b/pgdog/src/frontend/router/parser/error.rs
new file mode 100644
index 00000000..2dfc580d
--- /dev/null
+++ b/pgdog/src/frontend/router/parser/error.rs
@@ -0,0 +1,10 @@
+//! Parser errors.
+
+use thiserror::Error;
+
+/// Parser errors.
+#[derive(Debug, Error)]
+pub enum Error {
+ #[error("syntax error")]
+ Syntax,
+}
diff --git a/pgdog/src/frontend/router/parser/lexer.rs b/pgdog/src/frontend/router/parser/lexer.rs
new file mode 100644
index 00000000..8d10d96c
--- /dev/null
+++ b/pgdog/src/frontend/router/parser/lexer.rs
@@ -0,0 +1,129 @@
+//! SQL lexer.
+
+use std::mem::take;
+
+use super::{Error, Token};
+
+/// Lexer.
+pub struct Lexer<'a> {
+ sql: &'a str,
+ string: bool,
+ entity: bool,
+}
+
+impl<'a> Lexer<'a> {
+ pub fn new(sql: &'a str) -> Self {
+ Self {
+ sql,
+ string: false,
+ entity: false,
+ }
+ }
+
+ pub fn lex(mut self) -> Result<Vec<Token>, Error> {
+ let mut tokens = vec![];
+ let mut buffer = String::new();
+ let mut iter = self.sql.chars().peekable();
+
+ while let Some(c) = iter.next() {
+ match c {
+ '\'' => {
+ if !self.string {
+ self.string = true;
+ continue;
+ }
+
+ let next = iter.peek();
+
+ match next {
+ // Escape
+ Some('\'') => {
+ let _ = iter.next();
+ buffer.push('\'');
+ }
+
+ Some(' ') | Some(',') | Some(';') | None => {
+ self.string = false;
+ let _ = iter.next();
+ tokens.push(Token::String(take(&mut buffer)));
+ }
+
+ _ => continue,
+ }
+ }
+
+ '"' => {
+ if !self.entity {
+ self.entity = true;
+ continue;
+ }
+
+ let next = iter.peek();
+
+ match next {
+ // Escape
+ Some('"') => {
+ let _ = iter.next();
+ buffer.push('"');
+ }
+
+ Some(' ') | Some(',') | Some(';') | None => {
+ self.entity = false;
+ let _ = iter.next();
+ tokens.push(Token::Entity(take(&mut buffer)));
+ }
+
+ _ => continue,
+ }
+ }
+
+ ' ' | ';' | ',' => {
+ if self.entity || self.string {
+ buffer.push(c);
+ } else {
+ let token = match buffer.as_str() {
+ "select" => Token::Select,
+ "with" => Token::With,
+ "from" => Token::From,
+ "*" => Token::Star,
+ "" => continue,
+ _ => Token::Entity(take(&mut buffer)),
+ };
+ tokens.push(token);
+ let token = match c {
+ ' ' => Token::Space,
+ ',' => Token::Comma,
+ ';' => Token::End,
+ _ => unreachable!(),
+ };
+ tokens.push(token);
+ buffer.clear();
+ }
+ }
+
+ _ => {
+ if self.string || self.entity {
+ buffer.push(c);
+ } else {
+ buffer.push(c.to_ascii_lowercase());
+ }
+ }
+ }
+ }
+
+ Ok(tokens)
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn test_basic() {
+ let sql = r#"select a,b, cross_apple,"column a,!" from test;"#;
+ let lexer = Lexer::new(sql);
+ let tokens = lexer.lex().unwrap();
+ panic!("{:?}", tokens);
+ }
+}
diff --git a/pgdog/src/frontend/router/parser/mod.rs b/pgdog/src/frontend/router/parser/mod.rs
new file mode 100644
index 00000000..d2401f59
--- /dev/null
+++ b/pgdog/src/frontend/router/parser/mod.rs
@@ -0,0 +1,9 @@
+//! Statement parser.
+
+pub mod error;
+pub mod lexer;
+pub mod select;
+pub mod tokens;
+
+pub use error::Error;
+pub use tokens::Token;
diff --git a/pgdog/src/frontend/router/parser/select.rs b/pgdog/src/frontend/router/parser/select.rs
new file mode 100644
index 00000000..e69de29b
diff --git a/pgdog/src/frontend/router/parser/tokens.rs b/pgdog/src/frontend/router/parser/tokens.rs
new file mode 100644
index 00000000..99fdee91
--- /dev/null
+++ b/pgdog/src/frontend/router/parser/tokens.rs
@@ -0,0 +1,40 @@
+//! PostgreSQL protocol tokens.
+
+/// Protocol token.
+#[derive(Debug)]
+pub enum Token {
+ /// ' '
+ Space,
+ /// ,
+ Comma,
+ /// "users"
+ Entity(String),
+ /// 'users'
+ String(String),
+ /// 5
+ Integer(i64),
+ /// 5.5
+ Real(f64),
+
+ /// WITH
+ With,
+ /// RECURSIVE
+ Recursive,
+ Select,
+ From,
+ Order,
+ Limit,
+ Fetch,
+ For,
+ Update,
+ Share,
+ KeyShare,
+ Lateral,
+ Natural,
+ Join,
+ Outer,
+ Left,
+ Right,
+ Star,
+ End,
+}
diff --git a/src/main.rs b/pgdog/src/main.rs
similarity index 100%
rename from src/main.rs
rename to pgdog/src/main.rs
diff --git a/src/net/bidirectional.rs b/pgdog/src/net/bidirectional.rs
similarity index 100%
rename from src/net/bidirectional.rs
rename to pgdog/src/net/bidirectional.rs
diff --git a/src/net/error.rs b/pgdog/src/net/error.rs
similarity index 100%
rename from src/net/error.rs
rename to pgdog/src/net/error.rs
diff --git a/src/net/messages/auth/mod.rs b/pgdog/src/net/messages/auth/mod.rs
similarity index 100%
rename from src/net/messages/auth/mod.rs
rename to pgdog/src/net/messages/auth/mod.rs
diff --git a/src/net/messages/backend_key.rs b/pgdog/src/net/messages/backend_key.rs
similarity index 100%
rename from src/net/messages/backend_key.rs
rename to pgdog/src/net/messages/backend_key.rs
diff --git a/src/net/messages/command_complete.rs b/pgdog/src/net/messages/command_complete.rs
similarity index 100%
rename from src/net/messages/command_complete.rs
rename to pgdog/src/net/messages/command_complete.rs
diff --git a/src/net/messages/error_response.rs b/pgdog/src/net/messages/error_response.rs
similarity index 100%
rename from src/net/messages/error_response.rs
rename to pgdog/src/net/messages/error_response.rs
diff --git a/src/net/messages/hello.rs b/pgdog/src/net/messages/hello.rs
similarity index 100%
rename from src/net/messages/hello.rs
rename to pgdog/src/net/messages/hello.rs
diff --git a/src/net/messages/mod.rs b/pgdog/src/net/messages/mod.rs
similarity index 100%
rename from src/net/messages/mod.rs
rename to pgdog/src/net/messages/mod.rs
diff --git a/src/net/messages/parameter_status.rs b/pgdog/src/net/messages/parameter_status.rs
similarity index 100%
rename from src/net/messages/parameter_status.rs
rename to pgdog/src/net/messages/parameter_status.rs
diff --git a/pgdog/src/net/messages/parse.rs b/pgdog/src/net/messages/parse.rs
new file mode 100644
index 00000000..47e25b1d
--- /dev/null
+++ b/pgdog/src/net/messages/parse.rs
@@ -0,0 +1,59 @@
+//! Parse (F) message.
+
+use crate::net::c_string_buf;
+
+use super::code;
+use super::prelude::*;
+
+/// Parse (F) message.
+#[derive(Debug)]
+pub struct Parse {
+ /// Prepared statement name.
+ pub name: String,
+ /// Prepared statement query.
+ pub query: String,
+ /// List of data types if any are declared.
+ pub data_types: Vec<i32>,
+}
+
+impl FromBytes for Parse {
+ fn from_bytes(mut bytes: Bytes) -> Result<Self, Error> {
+ code!(bytes, 'P');
+ let _len = bytes.get_i32();
+ let name = c_string_buf(&mut bytes);
+ let query = c_string_buf(&mut bytes);
+ let params = bytes.get_i16() as usize;
+ let data_types = (0..params)
+ .into_iter()
+ .map(|_| bytes.get_i32())
+ .collect::<Vec<_>>();
+
+ Ok(Self {
+ name,
+ query,
+ data_types,
+ })
+ }
+}
+
+impl ToBytes for Parse {
+ fn to_bytes(&self) -> Result<Bytes, Error> {
+ let mut payload = Payload::named(self.code());
+
+ payload.put_string(&self.name);
+ payload.put_string(&self.query);
+ payload.put_i16(self.data_types.len() as i16);
+
+ for type_ in &self.data_types {
+ payload.put_i32(*type_);
+ }
+
+ Ok(payload.freeze())
+ }
+}
+
+impl Protocol for Parse {
+ fn code(&self) -> char {
+ 'P'
+ }
+}
diff --git a/src/net/messages/payload.rs b/pgdog/src/net/messages/payload.rs
similarity index 100%
rename from src/net/messages/payload.rs
rename to pgdog/src/net/messages/payload.rs
diff --git a/src/net/messages/prelude.rs b/pgdog/src/net/messages/prelude.rs
similarity index 100%
rename from src/net/messages/prelude.rs
rename to pgdog/src/net/messages/prelude.rs
diff --git a/src/net/messages/query.rs b/pgdog/src/net/messages/query.rs
similarity index 100%
rename from src/net/messages/query.rs
rename to pgdog/src/net/messages/query.rs
diff --git a/src/net/messages/rfq.rs b/pgdog/src/net/messages/rfq.rs
similarity index 100%
rename from src/net/messages/rfq.rs
rename to pgdog/src/net/messages/rfq.rs
diff --git a/src/net/messages/terminate.rs b/pgdog/src/net/messages/terminate.rs
similarity index 100%
rename from src/net/messages/terminate.rs
rename to pgdog/src/net/messages/terminate.rs
diff --git a/src/net/mod.rs b/pgdog/src/net/mod.rs
similarity index 100%
rename from src/net/mod.rs
rename to pgdog/src/net/mod.rs
diff --git a/src/net/parameter.rs b/pgdog/src/net/parameter.rs
similarity index 100%
rename from src/net/parameter.rs
rename to pgdog/src/net/parameter.rs
diff --git a/src/net/stream.rs b/pgdog/src/net/stream.rs
similarity index 100%
rename from src/net/stream.rs
rename to pgdog/src/net/stream.rs
diff --git a/src/net/tls.rs b/pgdog/src/net/tls.rs
similarity index 100%
rename from src/net/tls.rs
rename to pgdog/src/net/tls.rs
diff --git a/src/plugin.rs b/pgdog/src/plugin.rs
similarity index 100%
rename from src/plugin.rs
rename to pgdog/src/plugin.rs
diff --git a/src/state.rs b/pgdog/src/state.rs
similarity index 100%
rename from src/state.rs
rename to pgdog/src/state.rs
diff --git a/src/stats/mod.rs b/pgdog/src/stats/mod.rs
similarity index 100%
rename from src/stats/mod.rs
rename to pgdog/src/stats/mod.rs
diff --git a/tests/cert.pem b/pgdog/tests/cert.pem
similarity index 100%
rename from tests/cert.pem
rename to pgdog/tests/cert.pem
diff --git a/tests/key.pem b/pgdog/tests/key.pem
similarity index 100%
rename from tests/key.pem
rename to pgdog/tests/key.pem
diff --git a/tests/pgbouncer.ini b/pgdog/tests/pgbouncer.ini
similarity index 100%
rename from tests/pgbouncer.ini
rename to pgdog/tests/pgbouncer.ini
diff --git a/tests/userlist.txt b/pgdog/tests/userlist.txt
similarity index 100%
rename from tests/userlist.txt
rename to pgdog/tests/userlist.txt
diff --git a/src/net/messages/parse.rs b/src/net/messages/parse.rs
deleted file mode 100644
index 220bd454..00000000
--- a/src/net/messages/parse.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-//! Parse (F) message.
-
-/// Parse (F) message.
-#[derive(Debug)]
-pub struct Parse {
- query: String,
-}
[parent: 10a7a8729527]