#17952: Sqlite and mysql generating different queries with the same code
----------------------------------------------+--------------------
     Reporter:  glen.nelson.1@…               |      Owner:  nobody
         Type:  Uncategorized                 |     Status:  new
    Component:  Database layer (models, ORM)  |    Version:  1.3
     Severity:  Normal                        |   Keywords:
 Triage Stage:  Unreviewed                    |  Has patch:  0
Easy pickings:  0                             |      UI/UX:  0
----------------------------------------------+--------------------
 I happened to hit a case where mysql and sqlite generated very similiar
 queries. However, I would claim that sqlite is 'wrong':

 With mysql (note, I use 'run_hours', but I should be using 'run_seconds'):
 {{{
 >>> queryset = models.TestCaseRun.objects.filter(run_time__gte=300,
 submitted_date__range=(start, end)
 ).values('testcase__category__category').annotate(run_hours=Sum('run_time'))

 >>> print queryset
 [{'testcase__category__category': u'TestCat1', 'run_hours': 33139},
 {'testcase__category__category': u'TestCat2', 'run_hours': 723550},
 {'testcase__category__category': u'TestCat3', 'run_hours': 777324},
 {'testcase__category__category': u'TestCat4', 'run_hours': 212719},
 {'testcase__category__category': u'TestCat5', 'run_hours': 85552}]

 >>> print queryset.query
 # split for readability
 SELECT `metrics_testcasecategory`.`category`,
 SUM(`metrics_testcaserun`.`run_time`) AS `run_hours`
 FROM `metrics_testcaserun`
 INNER JOIN `metrics_testcase` ON (`metrics_testcaserun`.`testcase_id` =
 `metrics_testcase`.`id`)
 LEFT OUTER JOIN `metrics_testcasecategory` ON
 (`metrics_testcase`.`category_id` = `metrics_testcasecategory`.`id`)
 WHERE (`metrics_testcaserun`.`run_time` >= 300
 AND `metrics_testcaserun`.`submitted_date` BETWEEN 2012-03-01 00:00:00 and
 2012-03-22 13:02:30)
 GROUP BY `metrics_testcasecategory`.`category`,
 `metrics_testcasecategory`.`category`
 ORDER BY `metrics_testcaserun`.`submitted_date` DESC,
 `metrics_testcaserun`.`start_date` DESC
 }}}

 With sqlite3:
 {{{
 >>> queryset = models.TestCaseRun.objects.filter(run_time__gte=300,
 submitted_date__range=(start, end)
 ).values('testcase__category__category').annotate(run_hours=Sum('run_time'))

 >>> print queryset
 [{'testcase__category__category': u'TestCat1', 'run_hours': 3211},
 {'testcase__category__category': u'TestCat2', 'run_hours': 319},
 {'testcase__category__category': u'TestCat3', 'run_hours': 331},
 {'testcase__category__category': u'TestCat1', 'run_hours': 358},
 {'testcase__category__category': u'TestCat2', 'run_hours': 360},
 {'testcase__category__category': u'TestCat2', 'run_hours': 364},
 {'testcase__category__category': u'TestCat2', 'run_hours': 375},
 '...(remaining elements truncated)...']

 >>> print queryset.query
 # split for readability
 SELECT "metrics_testcasecategory"."category",
 SUM("metrics_testcaserun"."run_time") AS "run_hours"
 FROM "metrics_testcaserun"
 INNER JOIN "metrics_testcase" ON ("metrics_testcaserun"."testcase_id" =
 "metrics_testcase"."id")
 LEFT OUTER JOIN "metrics_testcasecategory" ON
 ("metrics_testcase"."category_id" = "metrics_testcasecategory"."id")
 WHERE ("metrics_testcaserun"."run_time" >= 300
 AND "metrics_testcaserun"."submitted_date" BETWEEN 2012-03-01 00:00:00 and
 2012-03-22 13:02:55.825543)
 GROUP BY "metrics_testcasecategory"."category",
 "metrics_testcasecategory"."category",
 "metrics_testcaserun"."submitted_date", "metrics_testcaserun"."start_date"
 ORDER BY "metrics_testcaserun"."submitted_date" DESC,
 "metrics_testcaserun"."start_date" DESC
 }}}

 Looks to me like it is just the group by that is different.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/17952>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to