/// \file /// \ingroup tutorial_sql /// \notebook -js /// /// This tutorial demonstrates how TSQLServer can be used to create a /// connection with a SQlite3 database. It accesses the Sqlite data base. /// Download from https://root.cern/files/root_download_stats.sqlite /// In order to display the Platform Distribution of ROOT, we choose to create two TH1F /// histograms: one that includes all types of platforms, other filtering and classifying them. /// This procedure is taking as parameter the values stored in the "Platform" column from the /// database. At the end, the histograms are filled /// with their specific demand regarding the platform's type. /// This product includes GeoLite2 data created by MaxMind, available from /// http://www.maxmind.com. /// /// \macro_code /// /// \author Alexandra-Maria Dobrescu 08/2018 #include #include #include #include void SQLitePlatformDistribution(){ TSQLServer *db = TSQLServer::Connect("sqlite://root_download_stats.sqlite", "", ""); const char *rootPlatform = "SELECT Platform FROM accesslog;"; TSQLResult *rootPlatformRes = db->Query(rootPlatform); TH1F *hrootPlatform = new TH1F("hrootPlatform", "Platform Distribution", 7, 0, -1); TH1F *shorthrootPlatform = new TH1F("shorthrootPlatform", "Short Platform Distribution", 7, 0, -1); while (TSQLRow *row = rootPlatformRes->Next()) { TString rowPlatform(row->GetField(0)); TString Platform(rowPlatform); TString Platform_0(rowPlatform(0,5)); TString Platform_1(rowPlatform(0,6)); TString Platform_2(rowPlatform(0,8)); if ( rowPlatform.Contains("win32") ){ shorthrootPlatform->Fill(Platform_0,1); } else if ( rowPlatform.Contains("Linux") ){ shorthrootPlatform->Fill(Platform_0,1); } else if ( rowPlatform.Contains("source") ){ shorthrootPlatform->Fill(Platform_1,1); } else if ( rowPlatform.Contains("macosx64") ){ shorthrootPlatform->Fill(Platform_2,1); } else if ( rowPlatform.Contains("IRIX64") ){ shorthrootPlatform->Fill(Platform_1,1); } hrootPlatform->Fill(Platform,1); delete row; } TCanvas *PlatformDistributionHistogram = new TCanvas(); hrootPlatform->GetXaxis()->LabelsOption("a"); hrootPlatform->LabelsDeflate("X"); hrootPlatform->Draw(); TCanvas *shortPlatformDistributionHistogram = new TCanvas(); shorthrootPlatform->GetXaxis()->LabelsOption("a"); shorthrootPlatform->LabelsDeflate("X"); shorthrootPlatform->Draw(); }