Browse Source

add query_builder

Sven Klemm 7 năm trước cách đây
mục cha
commit
3bce45d8a6
1 tập tin đã thay đổi với 50 bổ sung0 xóa
  1. 50 0
      public/app/plugins/datasource/postgres/query_builder.ts

+ 50 - 0
public/app/plugins/datasource/postgres/query_builder.ts

@@ -0,0 +1,50 @@
+
+export class PostgresQueryBuilder {
+  constructor(private target, private queryModel) {}
+
+  buildSchemaQuery() {
+    var query = "SELECT schema_name FROM information_schema.schemata WHERE";
+    query += " schema_name NOT LIKE 'pg_%' AND schema_name NOT LIKE '\\_%' AND schema_name <> 'information_schema';";
+
+    return query;
+  }
+
+  buildTableQuery() {
+    var query = "SELECT table_name FROM information_schema.tables WHERE ";
+    query += "table_schema = " + this.queryModel.quoteLiteral(this.target.schema);
+    return query;
+  }
+
+  buildColumnQuery(type?: string) {
+    var query = "SELECT column_name FROM information_schema.columns WHERE ";
+    query += "table_schema = " + this.queryModel.quoteLiteral(this.target.schema);
+    query += " AND table_name = " + this.queryModel.quoteLiteral(this.target.table);
+
+    switch (type) {
+      case "time": {
+        query += " AND data_type IN ('timestamp without time zone','timestamp with time zone','bigint','integer','double precision','real')";
+        break;
+      }
+      case "metric": {
+        query += " AND data_type IN ('text','char','varchar')";
+        break;
+      }
+      case "value": {
+        query += " AND data_type IN ('bigint','integer','double precision','real')";
+        break;
+      }
+    }
+
+    return query;
+  }
+
+  buildValueQuery(column: string) {
+    var query = "SELECT DISTINCT " + this.queryModel.quoteIdentifier(column) + "::text";
+    query += " FROM " + this.queryModel.quoteIdentifier(this.target.schema);
+    query += "." + this.queryModel.quoteIdentifier(this.target.table);
+    query += " ORDER BY " + this.queryModel.quoteIdentifier(column);
+    query += " LIMIT 100";
+    return query;
+  }
+
+}