mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-01-03 11:52:54 +00:00
fix: Normalize default constrain fn name (#2737)
* fix: normalize current_timestamp to current_timestamp() Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * add sqlness case Signed-off-by: Ruihang Xia <waynestxia@gmail.com> * fix clippy lints Signed-off-by: Ruihang Xia <waynestxia@gmail.com> --------- Signed-off-by: Ruihang Xia <waynestxia@gmail.com>
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
|
||||
mod column_schema;
|
||||
mod constraint;
|
||||
pub mod constraint;
|
||||
mod raw;
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
@@ -24,9 +24,9 @@ use crate::value::Value;
|
||||
use crate::vectors::operations::VectorOp;
|
||||
use crate::vectors::{TimestampMillisecondVector, VectorRef};
|
||||
|
||||
const CURRENT_TIMESTAMP: &str = "current_timestamp";
|
||||
const CURRENT_TIMESTAMP_FN: &str = "current_timestamp()";
|
||||
const NOW_FN: &str = "now()";
|
||||
pub const CURRENT_TIMESTAMP: &str = "current_timestamp";
|
||||
pub const CURRENT_TIMESTAMP_FN: &str = "current_timestamp()";
|
||||
pub const NOW_FN: &str = "now()";
|
||||
|
||||
/// Column's default constraint.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
|
||||
@@ -63,6 +63,7 @@ pub enum Error {
|
||||
Syntax {
|
||||
#[snafu(source)]
|
||||
error: ParserError,
|
||||
location: Location,
|
||||
},
|
||||
|
||||
#[snafu(display("Missing time index constraint"))]
|
||||
|
||||
@@ -37,6 +37,7 @@ use common_base::bytes::Bytes;
|
||||
use common_query::AddColumnLocation;
|
||||
use common_time::Timestamp;
|
||||
use datatypes::prelude::ConcreteDataType;
|
||||
use datatypes::schema::constraint::{CURRENT_TIMESTAMP, CURRENT_TIMESTAMP_FN};
|
||||
use datatypes::schema::{ColumnDefaultConstraint, ColumnSchema, COMMENT_KEY};
|
||||
use datatypes::types::cast::CastOption;
|
||||
use datatypes::types::{cast, TimestampType};
|
||||
@@ -270,8 +271,13 @@ fn parse_column_default_constraint(
|
||||
ColumnDefaultConstraint::Value(sql_value_to_value(column_name, data_type, v)?)
|
||||
}
|
||||
ColumnOption::Default(Expr::Function(func)) => {
|
||||
let mut func = format!("{func}").to_lowercase();
|
||||
// normalize CURRENT_TIMESTAMP to CURRENT_TIMESTAMP()
|
||||
if func == CURRENT_TIMESTAMP {
|
||||
func = CURRENT_TIMESTAMP_FN.to_string();
|
||||
}
|
||||
// Always use lowercase for function expression
|
||||
ColumnDefaultConstraint::Function(format!("{func}").to_lowercase())
|
||||
ColumnDefaultConstraint::Function(func.to_lowercase())
|
||||
}
|
||||
ColumnOption::Default(expr) => {
|
||||
return UnsupportedDefaultValueSnafu {
|
||||
|
||||
@@ -2,14 +2,62 @@ create table t1 (ts timestamp time index default CURRENT_TIMESTAMP);
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
show create table t1;
|
||||
|
||||
+-------+-----------------------------------------------------------+
|
||||
| Table | Create Table |
|
||||
+-------+-----------------------------------------------------------+
|
||||
| t1 | CREATE TABLE IF NOT EXISTS "t1" ( |
|
||||
| | "ts" TIMESTAMP(3) NOT NULL DEFAULT current_timestamp(), |
|
||||
| | TIME INDEX ("ts") |
|
||||
| | ) |
|
||||
| | |
|
||||
| | ENGINE=mito |
|
||||
| | WITH( |
|
||||
| | regions = 1 |
|
||||
| | ) |
|
||||
+-------+-----------------------------------------------------------+
|
||||
|
||||
create table t2 (ts timestamp time index default currEnt_tImEsTamp());
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
show create table t2;
|
||||
|
||||
+-------+-----------------------------------------------------------+
|
||||
| Table | Create Table |
|
||||
+-------+-----------------------------------------------------------+
|
||||
| t2 | CREATE TABLE IF NOT EXISTS "t2" ( |
|
||||
| | "ts" TIMESTAMP(3) NOT NULL DEFAULT current_timestamp(), |
|
||||
| | TIME INDEX ("ts") |
|
||||
| | ) |
|
||||
| | |
|
||||
| | ENGINE=mito |
|
||||
| | WITH( |
|
||||
| | regions = 1 |
|
||||
| | ) |
|
||||
+-------+-----------------------------------------------------------+
|
||||
|
||||
create table t3 (ts timestamp time index default now());
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
show create table t3;
|
||||
|
||||
+-------+---------------------------------------------+
|
||||
| Table | Create Table |
|
||||
+-------+---------------------------------------------+
|
||||
| t3 | CREATE TABLE IF NOT EXISTS "t3" ( |
|
||||
| | "ts" TIMESTAMP(3) NOT NULL DEFAULT now(), |
|
||||
| | TIME INDEX ("ts") |
|
||||
| | ) |
|
||||
| | |
|
||||
| | ENGINE=mito |
|
||||
| | WITH( |
|
||||
| | regions = 1 |
|
||||
| | ) |
|
||||
+-------+---------------------------------------------+
|
||||
|
||||
create table t4 (ts timestamp time index default now);
|
||||
|
||||
Error: 1001(Unsupported), Unsupported expr in default constraint: Identifier(Ident { value: "now", quote_style: None }) for column: ts
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
create table t1 (ts timestamp time index default CURRENT_TIMESTAMP);
|
||||
|
||||
show create table t1;
|
||||
|
||||
create table t2 (ts timestamp time index default currEnt_tImEsTamp());
|
||||
|
||||
show create table t2;
|
||||
|
||||
create table t3 (ts timestamp time index default now());
|
||||
|
||||
show create table t3;
|
||||
|
||||
create table t4 (ts timestamp time index default now);
|
||||
|
||||
drop table t1;
|
||||
|
||||
Reference in New Issue
Block a user