11f5207b7SJohn Levon#!/usr/bin/perl -w 21f5207b7SJohn Levon 31f5207b7SJohn Levonuse strict; 41f5207b7SJohn Levonuse warnings; 51f5207b7SJohn Levonuse bigint; 61f5207b7SJohn Levonuse DBI; 71f5207b7SJohn Levonuse Data::Dumper; 81f5207b7SJohn Levonuse File::Basename; 91f5207b7SJohn Levonuse Try::Tiny; 101f5207b7SJohn Levon 111f5207b7SJohn Levonmy $project = shift; 121f5207b7SJohn Levon$project =~ s/.*=(.*)/$1/; 131f5207b7SJohn Levonmy $warns = shift; 141f5207b7SJohn Levonmy $db_file = shift; 151f5207b7SJohn Levon 161f5207b7SJohn Levonsub preserve_existing_constraints() 171f5207b7SJohn Levon{ 181f5207b7SJohn Levon if (! -e "smatch_db.sqlite") { 191f5207b7SJohn Levon return; 201f5207b7SJohn Levon } 211f5207b7SJohn Levon 221f5207b7SJohn Levon my $db = DBI->connect("dbi:SQLite:$db_file", "", "",); 231f5207b7SJohn Levon $db->do('attach "smatch_db.sqlite" as old_db'); 241f5207b7SJohn Levon $db->do('insert into constraints select * from old_db.constraints'); 251f5207b7SJohn Levon $db->disconnect(); 261f5207b7SJohn Levon} 271f5207b7SJohn Levon 281f5207b7SJohn Levonmy $db; 291f5207b7SJohn Levon 301f5207b7SJohn Levonsub connect_to_db($) 311f5207b7SJohn Levon{ 321f5207b7SJohn Levon my $name = shift; 331f5207b7SJohn Levon 341f5207b7SJohn Levon $db = DBI->connect("dbi:SQLite:$name", "", "", {AutoCommit => 0}); 351f5207b7SJohn Levon 361f5207b7SJohn Levon $db->do("PRAGMA cache_size = 800000"); 371f5207b7SJohn Levon $db->do("PRAGMA journal_mode = OFF"); 381f5207b7SJohn Levon $db->do("PRAGMA count_changes = OFF"); 391f5207b7SJohn Levon $db->do("PRAGMA temp_store = MEMORY"); 401f5207b7SJohn Levon $db->do("PRAGMA locking = EXCLUSIVE"); 411f5207b7SJohn Levon} 421f5207b7SJohn Levon 431f5207b7SJohn Levonsub load_manual_constraints($$) 441f5207b7SJohn Levon{ 451f5207b7SJohn Levon my $full_path = shift; 461f5207b7SJohn Levon my $project = shift; 471f5207b7SJohn Levon my $dir = dirname($full_path); 481f5207b7SJohn Levon 49*efe51d0cSJohn Levon if ($project =~ /^$/) { 50*efe51d0cSJohn Levon return; 51*efe51d0cSJohn Levon } 52*efe51d0cSJohn Levon 531f5207b7SJohn Levon open(FILE, "$dir/$project.constraints"); 541f5207b7SJohn Levon while (<FILE>) { 551f5207b7SJohn Levon s/\n//; 561f5207b7SJohn Levon $db->do("insert or ignore into constraints (str) values ('$_')"); 571f5207b7SJohn Levon } 581f5207b7SJohn Levon close(FILE); 591f5207b7SJohn Levon 601f5207b7SJohn Levon open(FILE, "$dir/$project.constraints_required"); 611f5207b7SJohn Levon while (<FILE>) { 621f5207b7SJohn Levon my $limit; 631f5207b7SJohn Levon my $dummy; 641f5207b7SJohn Levon 651f5207b7SJohn Levon ($dummy, $dummy, $limit) = split(/,/); 661f5207b7SJohn Levon $limit =~ s/^ +//; 671f5207b7SJohn Levon $limit =~ s/\n//; 681f5207b7SJohn Levon try { 691f5207b7SJohn Levon $db->do("insert or ignore into constraints (str) values ('$limit')"); 701f5207b7SJohn Levon } catch {} 711f5207b7SJohn Levon } 721f5207b7SJohn Levon close(FILE); 731f5207b7SJohn Levon 741f5207b7SJohn Levon $db->commit(); 751f5207b7SJohn Levon} 761f5207b7SJohn Levon 771f5207b7SJohn Levonpreserve_existing_constraints(); 781f5207b7SJohn Levon 791f5207b7SJohn Levonconnect_to_db($db_file); 801f5207b7SJohn Levonload_manual_constraints($0, $project); 811f5207b7SJohn Levon 821f5207b7SJohn Levon$db->commit(); 831f5207b7SJohn Levon$db->disconnect(); 84