Explorar o código

fix filtering table rows on sqlite and mysql

Pouria Ezzati hai 1 ano
pai
achega
de103423e3

+ 2 - 0
server/knex.js

@@ -28,4 +28,6 @@ db.isPostgres = isPostgres;
 db.isSQLite = isSQLite;
 db.isMySQL = isMySQL;
 
+db.compatibleILIKE = isPostgres ? "andWhereILike" : "andWhereLike";
+
 module.exports = db;

+ 9 - 6
server/queries/domain.queries.js

@@ -142,16 +142,16 @@ async function getAdmin(match, params) {
   if (params?.user) {
     const id = parseInt(params?.user);
     if (Number.isNaN(id)) {
-      query.andWhereILike("users.email", "%" + params.user + "%");
+      query[knex.compatibleILIKE]("users.email", "%" + params.user + "%");
     } else {
       query.andWhere("domains.user_id", id);
     }
   }
 
   if (params?.search) {
-    query.andWhereRaw(
-      "concat_ws(' ', domains.address, domains.homepage) ILIKE '%' || ? || '%'",
-      [params.search]
+    query[knex.compatibleILIKE](
+      knex.raw("concat_ws(' ', domains.address, domains.homepage)"),
+      "%" + params.search + "%"
     );
   }
 
@@ -180,14 +180,17 @@ async function totalAdmin(match, params) {
   if (params?.user) {
     const id = parseInt(params?.user);
     if (Number.isNaN(id)) {
-      query.andWhereILike("users.email", "%" + params.user + "%");
+      query[knex.compatibleILIKE]("users.email", "%" + params.user + "%");
       } else {
       query.andWhere("domains.user_id", id);
     }
   }
 
   if (params?.search) {
-    query.andWhereILike("domains.address", "%" + params.search + "%");
+    query[knex.compatibleILIKE](
+      knex.raw("concat_ws(' ', domains.address, domains.homepage)"),
+      "%" + params.search + "%"
+    );
   }
 
   if (params?.links !== undefined) {

+ 16 - 16
server/queries/link.queries.js

@@ -64,9 +64,9 @@ async function total(match, params) {
   });
 
   if (params?.search) {
-    query.andWhereRaw(
-      "concat_ws(' ', description, links.address, target, domains.address) ILIKE '%' || ? || '%'",
-      [params.search]
+    query[knex.compatibleILIKE](
+      knex.raw("concat_ws(' ', description, links.address, target, domains.address)"), 
+      "%" + params.search + "%"
     );
   }
   query.leftJoin("domains", "links.domain_id", "domains.id");
@@ -87,21 +87,21 @@ async function totalAdmin(match, params) {
   if (params?.user) {
     const id = parseInt(params?.user);
     if (Number.isNaN(id)) {
-      query.andWhereILike("users.email", "%" + params.user + "%");
+      query[knex.compatibleILIKE]("users.email", "%" + params.user + "%");
       } else {
       query.andWhere("links.user_id", params.user);
     }
   }
 
   if (params?.search) {
-    query.andWhereRaw(
-      "concat_ws(' ', description, links.address, target) ILIKE '%' || ? || '%'",
-      [params.search]
+    query[knex.compatibleILIKE](
+      knex.raw("concat_ws(' ', description, links.address, target)"),
+      "%" + params.search + "%"
     );
   }
 
   if (params?.domain) {
-    query.andWhereRaw("domains.address ILIKE '%' || ? || '%'", [params.domain]);
+    query[knex.compatibleILIKE]("domains.address", "%" + params.domain + "%");
   }
   
   query.leftJoin("domains", "links.domain_id", "domains.id");
@@ -122,9 +122,9 @@ async function get(match, params) {
     .orderBy("links.id", "desc");
   
   if (params?.search) {
-    query.andWhereRaw(
-      "concat_ws(' ', description, links.address, target, domains.address) ILIKE '%' || ? || '%'",
-      [params.search]
+    query[knex.compatibleILIKE](
+      knex.raw("concat_ws(' ', description, links.address, target, domains.address)"), 
+      "%" + params.search + "%"
     );
   }
   
@@ -148,21 +148,21 @@ async function getAdmin(match, params) {
   if (params?.user) {
     const id = parseInt(params?.user);
     if (Number.isNaN(id)) {
-      query.andWhereILike("users.email", "%" + params.user + "%");
+      query[knex.compatibleILIKE]("users.email", "%" + params.user + "%");
     } else {
       query.andWhere("links.user_id", params.user);
     }
   }
 
   if (params?.search) {
-    query.andWhereRaw(
-      "concat_ws(' ', description, links.address, target) ILIKE '%' || ? || '%'",
-      [params.search]
+    query[knex.compatibleILIKE](
+      knex.raw("concat_ws(' ', description, links.address, target)"),
+      "%" + params.search + "%"
     );
   }
 
   if (params?.domain) {
-    query.andWhereRaw("domains.address ILIKE '%' || ? || '%'", [params.domain]);
+    query[knex.compatibleILIKE]("domains.address", "%" + params.domain + "%");
   }
   
   query.leftJoin("domains", "links.domain_id", "domains.id");

+ 2 - 2
server/queries/user.queries.js

@@ -144,7 +144,7 @@ async function getAdmin(match, params) {
   if (params?.search) {
     const id = parseInt(params?.search);
     if (Number.isNaN(id)) {
-      query.andWhereILike("users.email", "%" + params?.search + "%");
+      query[knex.compatibleILIKE]("users.email", "%" + params?.search + "%");
     } else {
       query.andWhere("users.id", params?.search);
     }
@@ -186,7 +186,7 @@ async function totalAdmin(match, params) {
   if (params?.search) {
     const id = parseInt(params?.search);
     if (Number.isNaN(id)) {
-      query.andWhereILike("users.email", "%" + params?.search + "%");
+      query[knex.compatibleILIKE]("users.email", "%" + params?.search + "%");
     } else {
       query.andWhere("users.id", params?.search);
     }