saumitra121 has asked for the wisdom of the Perl Monks concerning the following question:
I have a query below which is working fine in SQLite with DBD-SQLite-1.14 but when I am upgrading to DBD-SQLite-1.37 it is giving following error:
I have been searching for last two days why upgrading the DBD-SQLite is causing this query to fail.DBD::SQLite::db selectall_arrayref failed: aggregate functions are not + allowed in the GROUP BY clause
The query is as below:
I am using DBI-1.609 and SQLite v3.7.11.SELECT stat_day, obs_day, stat_week, obs_week, NULL AS stat_cputotal, +stat_memfree, stat_md5, stat_month, obs_month, stat_type, stat_memuse +d, stat_10min, obs_10min, NULL AS stat_cpusystem, stat_epoch, obs_epo +ch, stat_30day, obs_30day, stat_idx, obs_idx, NULL AS stat_cpuidle, s +tat_memtotal, stat_qtr, obs_qtr, NULL AS stat_cpuuser, stat_hour, obs +_hour, obs_10min, stat_10min, obs_30day, stat_30day, obs_day, stat_da +y, obs_epoch, stat_epoch, obs_hour, stat_hour, obs_idx, stat_idx, obs +_month, stat_month, obs_qtr, stat_qtr, obs_week, stat_week, serial_nu +m, NULL AS dputil_cpuid, NULL AS wms_pk FROM ((SELECT stat_qtr, obs_q +tr, stat_qtr AS cus_qtr, stat_qtr AS crash_qtr, stat_qtr AS evt_qtr, +stat_30day, obs_30day, stat_30day AS cus_30day, stat_30day AS crash_3 +0day, stat_30day AS evt_30day, stat_month, obs_month, stat_month AS c +us_month, stat_month AS crash_month, stat_month AS evt_month, stat_we +ek, obs_week, stat_week AS cus_week, stat_week AS crash_week, stat_we +ek AS evt_week, stat_day, obs_day, stat_day AS cus_day, stat_day AS c +rash_day, stat_day AS evt_day, stat_hour, obs_hour, stat_hour AS cus_ +hour, stat_hour AS crash_hour, stat_hour AS evt_hour, stat_10min, obs +_10min, stat_10min AS cus_10min, stat_10min AS crash_10min, stat_10mi +n AS evt_10min, stat_epoch, obs_epoch, stat_epoch AS cus_epoch, stat_ +epoch AS crash_epoch, stat_epoch AS evt_epoch, stat_idx, obs_idx, sta +t_idx AS cus_idx, stat_idx AS crash_idx, stat_idx AS evt_idx, obs_10m +in, obs_30day, obs_day, obs_epoch, obs_hour, obs_idx, obs_month, obs_ +qtr, obs_week, serial_num, stat_md5, MIN(stat_memfree) AS stat_memfre +e, MIN(stat_md5) AS stat_md5, MIN(stat_type) AS stat_type, MIN(stat_m +emused) AS stat_memused, MIN(stat_memtotal) AS stat_memtotal FROM (se +lect * from ( mem_stat NATURAL LEFT OUTER JOIN host )) GROUP BY stat_ +qtr, stat_30day, stat_month, stat_week, stat_day, stat_hour, stat_10m +in, stat_epoch, stat_idx, obs_10min, obs_30day, obs_day, obs_epoch, o +bs_hour, obs_idx, obs_month, obs_qtr, obs_week, serial_num, stat_md5) +)
Updating the question with new findings:
After installing SQLite v3.7.11, I tried reinstalling DBD-SQLite-1.14 from source. While running "perl Makefile.PL", it gave following message:I went on and installed the DBD-SQLite-1.14. Then I ran the following code to check which sqlite version is being used by DBD-SQLite.Checking installed SQLite version... SQLite version must be at least 3.3.9. No header file at that version or higher was found. Using the local version instead. Checking if your kit is complete... Looks good Multiple copies of Driver.xst found in: /usr/lib64/perl5/site_perl/5.8 +.8/x86_64-linux-thread-multi/auto/DBI/ /usr/lib64/perl5/vendor_perl/5 +.8.8/x86_64-linux-thread-multi/auto/DBI/ at Makefile.PL line 140 Using DBI 1.609 (for perl 5.008008 on x86_64-linux-thread-multi) insta +lled in /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/au +to/DBI/ Writing Makefile for DBD::SQLite
And it showed version as 3.4.2$dbh = DBI->connect("dbi:SQLite:dbname=myDB", "", ""); print $dbh->{sqlite_version};
Why is it unable to detect the current sqlite version?
When I tried installing the DBD-SQLite-1.37, it detected the SQLite version successfully.
|
|---|