diff --git a/src/promql/src/planner.rs b/src/promql/src/planner.rs index b69007a88f09..fa8c9fcf841d 100644 --- a/src/promql/src/planner.rs +++ b/src/promql/src/planner.rs @@ -292,14 +292,16 @@ impl PromPlanner { (None, None) => { let left_input = self.prom_expr_to_plan(*lhs.clone()).await?; let left_field_columns = self.ctx.field_columns.clone(); - let mut left_table_ref: OwnedTableReference = - self.ctx.table_name.clone().unwrap_or_default().into(); + let mut left_table_ref = OwnedTableReference::bare( + self.ctx.table_name.clone().unwrap_or_default(), + ); let left_context = self.ctx.clone(); let right_input = self.prom_expr_to_plan(*rhs.clone()).await?; let right_field_columns = self.ctx.field_columns.clone(); - let mut right_table_ref: OwnedTableReference = - self.ctx.table_name.clone().unwrap_or_default().into(); + let mut right_table_ref = OwnedTableReference::bare( + self.ctx.table_name.clone().unwrap_or_default(), + ); let right_context = self.ctx.clone(); // TODO(ruihang): avoid join if left and right are the same table @@ -572,6 +574,7 @@ impl PromPlanner { .context(NoMetricMatcherSnafu)?, ); } + self.ctx.table_name = metric_name; let mut matchers = HashSet::new(); @@ -1883,7 +1886,7 @@ impl PromPlanner { .chain(self.ctx.time_index_column.iter()) .map(|col| { Ok(DfExpr::Column(Column::new( - self.ctx.table_name.clone(), + self.ctx.table_name.clone().map(TableReference::bare), col, ))) }); diff --git a/tests/cases/standalone/common/system/information_schema.result b/tests/cases/standalone/common/system/information_schema.result index 8e9486f393df..1d39d272930a 100644 --- a/tests/cases/standalone/common/system/information_schema.result +++ b/tests/cases/standalone/common/system/information_schema.result @@ -622,6 +622,10 @@ desc table RUNTIME_METRICS; | timestamp | TimestampMillisecond | | NO | | FIELD | +-------------+----------------------+-----+------+---------+---------------+ +drop table my_db.foo; + +Affected Rows: 0 + use public; Affected Rows: 0 diff --git a/tests/cases/standalone/common/system/information_schema.sql b/tests/cases/standalone/common/system/information_schema.sql index c1109beab8aa..625391344aa3 100644 --- a/tests/cases/standalone/common/system/information_schema.sql +++ b/tests/cases/standalone/common/system/information_schema.sql @@ -117,4 +117,6 @@ select * from CHECK_CONSTRAINTS; desc table RUNTIME_METRICS; +drop table my_db.foo; + use public; diff --git a/tests/cases/standalone/common/tql/case_sensitive.result b/tests/cases/standalone/common/tql/case_sensitive.result new file mode 100644 index 000000000000..e98e41a71b3e --- /dev/null +++ b/tests/cases/standalone/common/tql/case_sensitive.result @@ -0,0 +1,77 @@ +create table "MemAvailable" (ts timestamp time index, instance string primary key, val double); + +Affected Rows: 0 + +create table "MemTotal" (ts timestamp time index, instance string primary key, val double); + +Affected Rows: 0 + +insert into "MemAvailable" values + (0, 'host0', 10), + (5000, 'host0', 20), + (10000, 'host0', 30), + (0, 'host1', 40), + (5000, 'host1', 50), + (10000, 'host1', 60); + +Affected Rows: 6 + +insert into "MemTotal" values + (0, 'host0', 100), + (5000, 'host0', 100), + (10000, 'host0', 100), + (0, 'host1', 100), + (5000, 'host1', 100), + (10000, 'host1', 100); + +Affected Rows: 6 + +select table_name from information_schema.tables where table_type = 'BASE TABLE' order by table_id; + ++--------------+ +| table_name | ++--------------+ +| MemAvailable | +| MemTotal | ++--------------+ + +-- SQLNESS SORT_RESULT 3 1 +tql eval (0,10,'5s') sum(MemAvailable / 4) + sum(MemTotal / 4); + ++---------------------+---------------------------------------------------------------------+ +| ts | MemAvailable.SUM(val / Float64(4)) + MemTotal.SUM(val / Float64(4)) | ++---------------------+---------------------------------------------------------------------+ +| 1970-01-01T00:00:00 | 62.5 | +| 1970-01-01T00:00:05 | 67.5 | +| 1970-01-01T00:00:10 | 72.5 | ++---------------------+---------------------------------------------------------------------+ + +drop table "MemTotal"; + +Affected Rows: 0 + +create schema "AnotherSchema"; + +Affected Rows: 1 + +create table "AnotherSchema"."MemTotal" (ts timestamp time index, instance string primary key, val double); + +Affected Rows: 0 + +tql eval (0,10,'5s') sum(MemAvailable / 4) + sum(MemTotal / 4); + +Error: 4001(TableNotFound), Table not found: greptime.public.MemTotal + +-- Cross schema is not supported +tql eval (0,10,'5s') sum(MemAvailable / 4) + sum({__name__="AnotherSchema.MemTotal"} / 4); + +Error: 4001(TableNotFound), Table not found: greptime.public.AnotherSchema.MemTotal + +drop table "MemAvailable"; + +Affected Rows: 0 + +drop table "AnotherSchema"."MemTotal"; + +Affected Rows: 0 + diff --git a/tests/cases/standalone/common/tql/case_sensitive.sql b/tests/cases/standalone/common/tql/case_sensitive.sql new file mode 100644 index 000000000000..6e75974abfc9 --- /dev/null +++ b/tests/cases/standalone/common/tql/case_sensitive.sql @@ -0,0 +1,39 @@ +create table "MemAvailable" (ts timestamp time index, instance string primary key, val double); + +create table "MemTotal" (ts timestamp time index, instance string primary key, val double); + +insert into "MemAvailable" values + (0, 'host0', 10), + (5000, 'host0', 20), + (10000, 'host0', 30), + (0, 'host1', 40), + (5000, 'host1', 50), + (10000, 'host1', 60); + +insert into "MemTotal" values + (0, 'host0', 100), + (5000, 'host0', 100), + (10000, 'host0', 100), + (0, 'host1', 100), + (5000, 'host1', 100), + (10000, 'host1', 100); + +select table_name from information_schema.tables where table_type = 'BASE TABLE' order by table_id; + +-- SQLNESS SORT_RESULT 3 1 +tql eval (0,10,'5s') sum(MemAvailable / 4) + sum(MemTotal / 4); + +drop table "MemTotal"; + +create schema "AnotherSchema"; + +create table "AnotherSchema"."MemTotal" (ts timestamp time index, instance string primary key, val double); + +tql eval (0,10,'5s') sum(MemAvailable / 4) + sum(MemTotal / 4); + +-- Cross schema is not supported +tql eval (0,10,'5s') sum(MemAvailable / 4) + sum({__name__="AnotherSchema.MemTotal"} / 4); + +drop table "MemAvailable"; + +drop table "AnotherSchema"."MemTotal";