Skip to content

Commit

Permalink
fix: Normalize default constrain fn name (#2737)
Browse files Browse the repository at this point in the history
* fix: normalize current_timestamp to current_timestamp()

Signed-off-by: Ruihang Xia <[email protected]>

* add sqlness case

Signed-off-by: Ruihang Xia <[email protected]>

* fix clippy lints

Signed-off-by: Ruihang Xia <[email protected]>

---------

Signed-off-by: Ruihang Xia <[email protected]>
  • Loading branch information
waynexia authored Nov 14, 2023
1 parent 506e688 commit 8f3b299
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/datatypes/src/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
// limitations under the License.

mod column_schema;
mod constraint;
pub mod constraint;
mod raw;

use std::collections::HashMap;
Expand Down
6 changes: 3 additions & 3 deletions src/datatypes/src/schema/constraint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down
1 change: 1 addition & 0 deletions src/sql/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ pub enum Error {
Syntax {
#[snafu(source)]
error: ParserError,
location: Location,
},

#[snafu(display("Missing time index constraint"))]
Expand Down
8 changes: 7 additions & 1 deletion src/sql/src/statements.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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 {
Expand Down
48 changes: 48 additions & 0 deletions tests/cases/standalone/common/create/current_timestamp.result
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions tests/cases/standalone/common/create/current_timestamp.sql
Original file line number Diff line number Diff line change
@@ -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;
Expand Down

0 comments on commit 8f3b299

Please sign in to comment.