mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-07 17:04:59 +00:00
Postgres: Add support for text search types (#1889)
This commit is contained in:
parent
204d3b484d
commit
1d0dc7cdd8
4 changed files with 49 additions and 0 deletions
|
@ -446,6 +446,14 @@ pub enum DataType {
|
||||||
///
|
///
|
||||||
/// [PostgreSQL]: https://www.postgresql.org/docs/9.5/functions-geometry.html
|
/// [PostgreSQL]: https://www.postgresql.org/docs/9.5/functions-geometry.html
|
||||||
GeometricType(GeometricTypeKind),
|
GeometricType(GeometricTypeKind),
|
||||||
|
/// PostgreSQL text search vectors, see [PostgreSQL].
|
||||||
|
///
|
||||||
|
/// [PostgreSQL]: https://www.postgresql.org/docs/17/datatype-textsearch.html
|
||||||
|
TsVector,
|
||||||
|
/// PostgreSQL text search query, see [PostgreSQL].
|
||||||
|
///
|
||||||
|
/// [PostgreSQL]: https://www.postgresql.org/docs/17/datatype-textsearch.html
|
||||||
|
TsQuery,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for DataType {
|
impl fmt::Display for DataType {
|
||||||
|
@ -738,6 +746,8 @@ impl fmt::Display for DataType {
|
||||||
write!(f, "{} TABLE ({})", name, display_comma_separated(columns))
|
write!(f, "{} TABLE ({})", name, display_comma_separated(columns))
|
||||||
}
|
}
|
||||||
DataType::GeometricType(kind) => write!(f, "{}", kind),
|
DataType::GeometricType(kind) => write!(f, "{}", kind),
|
||||||
|
DataType::TsVector => write!(f, "TSVECTOR"),
|
||||||
|
DataType::TsQuery => write!(f, "TSQUERY"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -935,6 +935,8 @@ define_keywords!(
|
||||||
TRY,
|
TRY,
|
||||||
TRY_CAST,
|
TRY_CAST,
|
||||||
TRY_CONVERT,
|
TRY_CONVERT,
|
||||||
|
TSQUERY,
|
||||||
|
TSVECTOR,
|
||||||
TUPLE,
|
TUPLE,
|
||||||
TYPE,
|
TYPE,
|
||||||
UBIGINT,
|
UBIGINT,
|
||||||
|
|
|
@ -9909,6 +9909,12 @@ impl<'a> Parser<'a> {
|
||||||
Ok(DataType::Unsigned)
|
Ok(DataType::Unsigned)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Keyword::TSVECTOR if dialect_is!(dialect is PostgreSqlDialect | GenericDialect) => {
|
||||||
|
Ok(DataType::TsVector)
|
||||||
|
}
|
||||||
|
Keyword::TSQUERY if dialect_is!(dialect is PostgreSqlDialect | GenericDialect) => {
|
||||||
|
Ok(DataType::TsQuery)
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
self.prev_token();
|
self.prev_token();
|
||||||
let type_name = self.parse_object_name(false)?;
|
let type_name = self.parse_object_name(false)?;
|
||||||
|
|
|
@ -6201,3 +6201,34 @@ fn parse_alter_table_replica_identity() {
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_ts_datatypes() {
|
||||||
|
match pg_and_generic().verified_stmt("CREATE TABLE foo (x TSVECTOR)") {
|
||||||
|
Statement::CreateTable(CreateTable { columns, .. }) => {
|
||||||
|
assert_eq!(
|
||||||
|
columns,
|
||||||
|
vec![ColumnDef {
|
||||||
|
name: "x".into(),
|
||||||
|
data_type: DataType::TsVector,
|
||||||
|
options: vec![],
|
||||||
|
}]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
|
||||||
|
match pg_and_generic().verified_stmt("CREATE TABLE foo (x TSQUERY)") {
|
||||||
|
Statement::CreateTable(CreateTable { columns, .. }) => {
|
||||||
|
assert_eq!(
|
||||||
|
columns,
|
||||||
|
vec![ColumnDef {
|
||||||
|
name: "x".into(),
|
||||||
|
data_type: DataType::TsQuery,
|
||||||
|
options: vec![],
|
||||||
|
}]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue