Skip to content

Commit

Permalink
parse int2 and int4 from text format
Browse files Browse the repository at this point in the history
  • Loading branch information
imor committed Nov 26, 2024
1 parent ef98633 commit a6e850a
Showing 1 changed file with 124 additions and 0 deletions.
124 changes: 124 additions & 0 deletions pg_replicate/src/conversions/cdc_event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,131 @@ impl FromTupleData for TextFormatConverter {
let str = str::from_utf8(bytes)?;
info!("TYP: {typ:#?}, STR: {str:#?}");
match *typ {
// Type::BOOL => {
// let val = bool::from_sql(typ, bytes)?;
// Ok(Cell::Bool(val))
// }
// Type::BOOL_ARRAY => {
// let val = Vec::<Option<bool>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::Bool(val)))
// }
// Type::CHAR | Type::BPCHAR | Type::VARCHAR | Type::NAME | Type::TEXT => {
// let val = String::from_sql(typ, bytes)?;
// Ok(Cell::String(val.to_string()))
// }
// Type::CHAR_ARRAY
// | Type::BPCHAR_ARRAY
// | Type::VARCHAR_ARRAY
// | Type::NAME_ARRAY
// | Type::TEXT_ARRAY => {
// let val = Vec::<Option<String>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::String(val)))
// }
Type::INT2 => Ok(Cell::I16(str.parse()?)),
// Type::INT2_ARRAY => {
// let val = Vec::<Option<i16>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::I16(val)))
// }
Type::INT4 => Ok(Cell::I32(str.parse()?)),
// Type::INT4_ARRAY => {
// let val = Vec::<Option<i32>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::I32(val)))
// }
Type::INT8 => Ok(Cell::I64(str.parse()?)),
// Type::INT8_ARRAY => {
// let val = Vec::<Option<i64>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::I64(val)))
// }
// Type::FLOAT4 => {
// let val = f32::from_sql(typ, bytes)?;
// Ok(Cell::F32(val))
// }
// Type::FLOAT4_ARRAY => {
// let val = Vec::<Option<f32>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::F32(val)))
// }
// Type::FLOAT8 => {
// let val = f64::from_sql(typ, bytes)?;
// Ok(Cell::F64(val))
// }
// Type::FLOAT8_ARRAY => {
// let val = Vec::<Option<f64>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::F64(val)))
// }
// Type::NUMERIC => {
// let val = PgNumeric::from_sql(typ, bytes)?;
// Ok(Cell::Numeric(val))
// }
// Type::NUMERIC_ARRAY => {
// let val = Vec::<Option<PgNumeric>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::Numeric(val)))
// }
// Type::BYTEA => {
// let val = Vec::<u8>::from_sql(typ, bytes)?;
// Ok(Cell::Bytes(val))
// }
// Type::BYTEA_ARRAY => {
// let val = Vec::<Option<Vec<u8>>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::Bytes(val)))
// }
// Type::DATE => {
// let val = NaiveDate::from_sql(typ, bytes)?;
// Ok(Cell::Date(val))
// }
// Type::DATE_ARRAY => {
// let val = Vec::<Option<NaiveDate>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::Date(val)))
// }
// Type::TIME => {
// let val = NaiveTime::from_sql(typ, bytes)?;
// Ok(Cell::Time(val))
// }
// Type::TIME_ARRAY => {
// let val = Vec::<Option<NaiveTime>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::Time(val)))
// }
// Type::TIMESTAMP => {
// let val = NaiveDateTime::from_sql(typ, bytes)?;
// Ok(Cell::TimeStamp(val))
// }
// Type::TIMESTAMP_ARRAY => {
// let val = Vec::<Option<NaiveDateTime>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::TimeStamp(val)))
// }
// Type::TIMESTAMPTZ => {
// let val = DateTime::<FixedOffset>::from_sql(typ, bytes)?;
// Ok(Cell::TimeStampTz(val.into()))
// }
// Type::TIMESTAMPTZ_ARRAY => {
// let mut val = Vec::<Option<DateTime<FixedOffset>>>::from_sql(typ, bytes)?;
// let val: Vec<Option<DateTime<Utc>>> =
// val.drain(..).map(|v| v.map(|v| v.into())).collect();
// Ok(Cell::Array(ArrayCell::TimeStampTz(val)))
// }
// Type::UUID => {
// let val = Uuid::from_sql(typ, bytes)?;
// Ok(Cell::Uuid(val))
// }
// Type::UUID_ARRAY => {
// let val = Vec::<Option<Uuid>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::Uuid(val)))
// }
// Type::JSON | Type::JSONB => {
// let val = serde_json::Value::from_sql(typ, bytes)?;
// Ok(Cell::Json(val))
// }
// Type::JSON_ARRAY | Type::JSONB_ARRAY => {
// let val = Vec::<Option<serde_json::Value>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::Json(val)))
// }
// Type::OID => {
// let val = u32::from_sql(typ, bytes)?;
// Ok(Cell::U32(val))
// }
// Type::OID_ARRAY => {
// let val = Vec::<Option<u32>>::from_sql(typ, bytes)?;
// Ok(Cell::Array(ArrayCell::U32(val)))
// }
#[cfg(feature = "unknown_types_to_bytes")]
_ => Ok(Cell::String(str.to_string())),
#[cfg(not(feature = "unknown_types_to_bytes"))]
Expand Down

0 comments on commit a6e850a

Please sign in to comment.