Skip to content

Commit

Permalink
mark version_matches pg funcs as unsafe.
Browse files Browse the repository at this point in the history
  • Loading branch information
JimFuller-RedHat authored and ctron committed Sep 20, 2024
1 parent 9145a6e commit 3178cc6
Show file tree
Hide file tree
Showing 16 changed files with 826 additions and 0 deletions.
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

0 comments on commit 3178cc6

Please sign in to comment.