Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mark version_matches pg funcs as unsafe. #831

Merged
merged 1 commit into from
Sep 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions migration/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ mod m0000595_analysis_api_index;
mod m0000600_remove_raise_notice_fns;
mod m0000605_create_source_document;
mod m0000610_improve_version_cmp_fns;
mod m0000620_parallel_unsafe_pg_fns;
pub struct Migrator;

#[async_trait::async_trait]
Expand Down Expand Up @@ -158,6 +159,7 @@ impl MigratorTrait for Migrator {
Box::new(m0000600_remove_raise_notice_fns::Migration),
Box::new(m0000605_create_source_document::Migration),
Box::new(m0000610_improve_version_cmp_fns::Migration),
Box::new(m0000620_parallel_unsafe_pg_fns::Migration),
]
}
}
Expand Down
209 changes: 209 additions & 0 deletions migration/src/m0000620_parallel_unsafe_pg_fns.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
use sea_orm_migration::prelude::*;

#[derive(DeriveMigrationName)]
pub struct Migration;

#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/gitver_version_matches.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/is_numeric.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/maven_version_matches.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/mavenver_cmp.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/rpmver_cmp.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/rpmver_version_matches.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/semver_cmp.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/semver_eq.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/semver_gt.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/semver_gte.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/semver_lt.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/semver_lte.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/semver_version_matches.sql"
))
.await
.map(|_| ())?;

manager
.get_connection()
.execute_unprepared(include_str!(
"m0000620_parallel_unsafe_pg_fns/version_matches.sql"
))
.await
.map(|_| ())?;

Ok(())
}

async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.get_connection()
.execute_unprepared(include_str!(
"m0000510_create_maven_cmp_fns/version_matches.sql"
))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!("m0000580_mark_fns/semver_version_matches.sql"))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!("m0000580_mark_fns/semver_lte.sql"))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!("m0000580_mark_fns/semver_lt.sql"))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!("m0000580_mark_fns/semver_gte.sql"))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!("m0000580_mark_fns/semver_gt.sql"))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!("m0000580_mark_fns/semver_eq.sql"))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!(
"m0000610_improve_version_cmp_fns/semver_cmp.sql"
))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!("m0000580_mark_fns/rpmver_version_matches.sql"))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!(
"m0000480_create_rpmver_cmp_fns/rpmver_cmp.sql"
))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!(
"m0000610_improve_version_cmp_fns/mavenver_cmp.sql"
))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!(
"m0000510_create_maven_cmp_fns/maven_version_matches.sql"
))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!("m0000580_mark_fns/is_numeric.sql"))
.await
.map(|_| ())?;
manager
.get_connection()
.execute_unprepared(include_str!(
"m0000485_create_gitver_cmp_fns/gitver_version_matches.sql"
))
.await
.map(|_| ())?;
Ok(())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@

create or replace function gitver_version_matches(version_p text, range_p version_range)
returns bool
as
$$
begin
if range_p.low_version is not null then
if range_p.low_inclusive then
if version_p = range_p.low_version then
return true;
end if;
end if;
end if;

if range_p.high_version is not null then
if range_p.high_inclusive then
if version_p = range_p.high_version then
return true;
end if;
end if;
end if;

return false;

end
$$
language plpgsql immutable;

10 changes: 10 additions & 0 deletions migration/src/m0000620_parallel_unsafe_pg_fns/is_numeric.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
create or replace function is_numeric(str text)
returns bool
as
$$
begin
return str ~ e'^[0-9]+$';
end

$$
language 'plpgsql' immutable;
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@


create or replace function maven_version_matches(version_p text, range_p version_range)
returns bool
as
$$
declare
low_end integer;
high_end integer;
begin
if range_p.low_version is not null then
low_end := mavenver_cmp(version_p, range_p.low_version);
end if;

if low_end is not null then
if range_p.low_inclusive then
if low_end < 0 then
return false;
end if;
else
if low_end <= 0 then
return false;
end if;
end if;

end if;


if range_p.high_version is not null then
high_end := mavenver_cmp(version_p, range_p.high_version);
end if;

if high_end is not null then
if range_p.high_inclusive then
if high_end > 0 then
return false;
end if;
else
if high_end >= 0 then
return false;
end if;
end if;
end if;

if low_end is null and high_end is null then
return false;
end if;

return true;

end
$$
language plpgsql immutable;

Loading