db: store "too common" functions in the database
authorDan Carpenter <dan.carpenter@oracle.com>
Wed, 17 Apr 2013 16:23:39 +0000 (17 19:23 +0300)
committerDan Carpenter <dan.carpenter@oracle.com>
Wed, 17 Apr 2013 16:23:39 +0000 (17 19:23 +0300)
When I query the database, it's annoying that the most common functions
are not in there.  With this change, it creates an entry for the common
functions to show that we do know that they are called.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch_data/db/create_db.sh
smatch_data/db/fill_db_caller_info.pl
smatch_data/db/fill_db_sql.pl

index b9a6432..f62edeb 100755 (executable)
@@ -22,7 +22,7 @@ for i in ${bin_dir}/*.schema ; do
 done
 
 for i in ${bin_dir}/fill_* ; do
-    $i $info_file
+    $i "$PROJ" $info_file
 done
 
 if [ "$PROJ" != "" ] ; then
index 78f92c2..3a708e1 100755 (executable)
@@ -6,13 +6,15 @@ use Scalar::Util qw(looks_like_number);
 
 sub usage()
 {
-    print "usage:  $0 <warns.txt>\n";
+    print "usage:  $0 <project> <warns.txt>\n";
     exit(1);
 }
 
 my %too_common_funcs;
-sub get_too_common_functions($)
+sub get_too_common_functions($$$)
 {
+    my $path = shift;
+    my $project = shift;
     my $warns = shift;
 
     open(FUNCS, "cat $warns | grep 'SQL_caller_info: ' | grep '%call_marker%' | cut -d \"'\" -f 6 | sort | uniq -c | ");
@@ -26,15 +28,26 @@ sub get_too_common_functions($)
     }
 
     close(FUNCS);
+
+    open(FILE, "$path/../$project.common_functions");
+    while (<FILE>) {
+        s/\n//;
+        $too_common_funcs{$_} = 1;
+    }
+    close(FILE);
 }
 
+my $exec_name = $0;
+my $path = $exec_name;
+$path =~ s/(.*)\/.*/$1/;
+my $project = shift;
 my $warns = shift;
 
 if (!defined($warns)) {
     usage();
 }
 
-get_too_common_functions($warns);
+get_too_common_functions($path, $project, $warns);
 
 my $db = DBI->connect("dbi:SQLite:smatch_db.sqlite", "", "", {AutoCommit => 0});
 $db->do("PRAGMA synchronous = OFF");
@@ -44,6 +57,10 @@ $db->do("PRAGMA count_changes = OFF");
 $db->do("PRAGMA temp_store = MEMORY");
 $db->do("PRAGMA locking = EXCLUSIVE");
 
+foreach my $func (keys %too_common_funcs) {
+    $db->do("insert into caller_info values ('unknown', 'too common', '$func', 0, 0, 0, -1, '', '');");
+}
+
 my $call_id = 0;
 my ($fn, $dummy, $sql);
 
index 92877a8..c4d4deb 100755 (executable)
@@ -3,10 +3,11 @@
 use strict;
 use DBI;
 
+my $project = shift;
 my $warns = shift;
 
 if (!defined($warns)) {
-    print "usage:  $0 <warns.txt>\n";
+    print "usage:  $0 <project> <warns.txt>\n";
     exit(1);
 }