Bypass compile-time query check (#317)

This commit is contained in:
Geometrically 2022-03-06 21:06:29 -07:00 committed by GitHub
parent 18f34b4f83
commit 3883c509b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 42 deletions

View File

@ -3764,38 +3764,6 @@
"nullable": [] "nullable": []
} }
}, },
"b464a2ca83b073d251ae2a5bd3ed94167c2dfc2046b38b6ef3aa30c46aaf5ad9": {
"query": "\n SELECT d.dependency_id, vd.mod_id, d.mod_dependency_id\n FROM versions v\n INNER JOIN dependencies d ON d.dependent_id = v.id\n LEFT JOIN versions vd ON d.dependency_id = vd.id\n WHERE v.mod_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "dependency_id",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "mod_id",
"type_info": "Int8"
},
{
"ordinal": 2,
"name": "mod_dependency_id",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Int8"
]
},
"nullable": [
true,
false,
true
]
}
},
"b69a6f42965b3e7103fcbf46e39528466926789ff31e9ed2591bb175527ec169": { "b69a6f42965b3e7103fcbf46e39528466926789ff31e9ed2591bb175527ec169": {
"query": "\n DELETE FROM users\n WHERE id = $1\n ", "query": "\n DELETE FROM users\n WHERE id = $1\n ",
"describe": { "describe": {

View File

@ -15,7 +15,7 @@ use actix_web::web::Data;
use actix_web::{delete, get, patch, post, web, HttpRequest, HttpResponse}; use actix_web::{delete, get, patch, post, web, HttpRequest, HttpResponse};
use futures::StreamExt; use futures::StreamExt;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use sqlx::PgPool; use sqlx::{PgPool, Row};
use std::sync::Arc; use std::sync::Arc;
use validator::Validate; use validator::Validate;
@ -110,7 +110,8 @@ pub async fn dependency_list(
use futures::stream::TryStreamExt; use futures::stream::TryStreamExt;
let dependencies = sqlx::query!( //TODO: This query is not checked at compile time! Once SQLX parses this query correctly, please use the query! macro instead
let dependencies = sqlx::query(
" "
SELECT d.dependency_id, vd.mod_id, d.mod_dependency_id SELECT d.dependency_id, vd.mod_id, d.mod_dependency_id
FROM versions v FROM versions v
@ -118,19 +119,18 @@ pub async fn dependency_list(
LEFT JOIN versions vd ON d.dependency_id = vd.id LEFT JOIN versions vd ON d.dependency_id = vd.id
WHERE v.mod_id = $1 WHERE v.mod_id = $1
", ",
id as database::models::ProjectId
) )
.bind(id as database::models::ProjectId)
.fetch_many(&**pool) .fetch_many(&**pool)
.try_filter_map(|e| async { .try_filter_map(|e| async {
Ok(e.right().map(|x| { Ok(e.right().map(|x| {
( (
x.dependency_id.map(database::models::VersionId), x.get::<Option<i64>, usize>(0)
if x.mod_id == 0 { .map(database::models::VersionId),
None x.get::<Option<i64>, usize>(1)
} else { .map(database::models::ProjectId),
Some(database::models::ProjectId(x.mod_id)) x.get::<Option<i64>, usize>(2)
}, .map(database::models::ProjectId),
x.mod_dependency_id.map(database::models::ProjectId),
) )
})) }))
}) })