QL: Object-oriented Queries on Relational Data

Authors Pavel Avgustinov, Oege de Moor, Michael Peyton Jones, Max Schäfer

Thumbnail PDF


  • Filesize: 0.6 MB
  • 26 pages

Document Identifiers

Author Details

Pavel Avgustinov
Oege de Moor
Michael Peyton Jones
Max Schäfer

Cite AsGet BibTex

Pavel Avgustinov, Oege de Moor, Michael Peyton Jones, and Max Schäfer. QL: Object-oriented Queries on Relational Data. In 30th European Conference on Object-Oriented Programming (ECOOP 2016). Leibniz International Proceedings in Informatics (LIPIcs), Volume 56, pp. 2:1-2:25, Schloss Dagstuhl – Leibniz-Zentrum für Informatik (2016)


This paper describes QL, a language for querying complex, potentially recursive data structures. QL compiles to Datalog and runs on a standard relational database, yet it provides familiar-looking object-oriented features such as classes and methods, reinterpreted in logical terms: classes are logical properties describing sets of values, subclassing is implication, and virtual calls are dispatched dynamically by considering the most specific classes containing the receiver. Furthermore, types in QL are prescriptive and actively influence program evaluation rather than just describing it. In combination, these features enable the development of concise queries based on reusable libraries, which are written in a purely declarative style, yet can be efficiently executed even on very large data sets. In particular, we have used QL to implement static analyses for various programming languages, which scale to millions of lines of code.
  • Object orientation
  • Datalog
  • query languages
  • prescriptive typing


  • Access Statistics
  • Total Accesses (updated on a weekly basis)
    PDF Downloads


  1. Serge Abiteboul and Anthony J. Bonner. Objects and views. In SIGMOD, 1991. Google Scholar
  2. Serge Abiteboul, Georg Lausen, Heinz Uphoff, and Emmanuel Waller. Methods and rules. In SIGMOD, 1993. Google Scholar
  3. Hassan Aït-Kaci and Roger Nasr. LOGIN: A logic programming language with built-in inheritance. JLP, 3(3), 1986. Google Scholar
  4. Molham Aref, Balder ten Cate, Todd J. Green, Benny Kimelfeld, Dan Olteanu, Emir Pasalic, Todd L. Veldhuizen, and Geoffrey Washburn. Design and implementation of the LogicBlox system. In SIGMOD, 2015. Google Scholar
  5. Malcolm Atkinson, François Bancilhon, David DeWitt, Klaus Dittrich, David Maier, and Stanley Zdonik. The object-oriented database system manifesto. In DOOD, 1989. Google Scholar
  6. Pavel Avgustinov, Arthur I. Baars, Anders S. Henriksen, R. Greg Lavender, Galen Menzel, Oege de Moor, Max Schäfer, and Julian Tibble. Tracking static analysis violations over time to capture developer characteristics. In ICSE, 2015. Google Scholar
  7. François Bancilhon, David Maier, Yehoshua Sagiv, and Jeffrey D. Ullman. Magic sets and other strange ways to implement logic programs. In PODS, 1986. Google Scholar
  8. Martin Bravenboer and Yannis Smaragdakis. Strictly declarative specification of sophisticated points-to analyses. In OOPSLA, 2009. Google Scholar
  9. Tal Cohen, Joseph Gil, and Itay Maman. JTL: The Java tools language. In OOPSLA, 2006. Google Scholar
  10. Mariano Consens, Alberto Mendelzon, and Arthur Ryman. Visualizing and querying software structures. In ICSE, 1992. Google Scholar
  11. William R. Cook. On understanding data abstraction, revisited. In OOPSLA, 2009. Google Scholar
  12. Roger Crew. ASTLOG: A language for examining abstract syntax trees. In DSL, 1997. Google Scholar
  13. Hugh Darwen and C. J. Date. The third manifesto. SIGMOD Records, 24(1), 1995. Google Scholar
  14. Stephen Dawson, C. R. Ramakrishnan, and David S. Warren. Practical program analysis using general purpose logic programming systems. In PLDI, 1996. Google Scholar
  15. Oege de Moor, Damien Sereni, Pavel Avgustinov, and Mathieu Verbaere. Type inference for Datalog and its application to query optimisation. In PODS, 2008. Google Scholar
  16. Oege de Moor, Damien Sereni, Mathieu Verbaere, Elnar Hajiyev, Pavel Avgustinov, Torbjörn Ekman, Neil Ongkingco, and Julian Tibble. .QL: Object-oriented queries made easy. In GTTSE, 2007. Google Scholar
  17. Oege de Moor, Mathieu Verbaere, Elnar Hajiyev, Pavel Avgustinov, Torbjörn Ekman, Neil Ongkingco, Damien Sereni, and Julian Tibble. .QL for source code analysis. In SCAM, 2007. Google Scholar
  18. Jürgen Ebert, Bernt Kullbach, Volker Riediger, and Andreas Winter. GUPRO - generic understanding of programs. ENTCS, 72(2), 2002. Google Scholar
  19. Michael D. Ernst, Craig S. Kaplan, and Craig Chambers. Predicate dispatching: A unified theory of dispatch. In ECOOP, 1998. Google Scholar
  20. Elnar Hajiyev, Mathieu Verbaere, and Oege de Moor. CodeQuest: Scalable source code queries with Datalog. In ECOOP, 2006. Google Scholar
  21. Doug Janzen and Kris De Volder. Navigating and querying code without getting lost. In AOSD, 2003. Google Scholar
  22. Stan Jarzabek. Design of flexible static program analyzers with PQL. TSE, 24(3), 1998. Google Scholar
  23. Shahram Javey, Kin'ichi Mitsui, Hiroaki Nakamura, Tsuyoshi Ohira, Kazu Yasuda, Kazushi Kuse, Tsutomu Kamimura, and Richard Helm. Architecture of the XL C++ browser. In CASCON, 1992. Google Scholar
  24. Michael Kifer and James Wu. A logic for object-oriented logic programming. In PODS, 1989. Google Scholar
  25. Paul Klint, Tijs van der Storm, and Jurgen J. Vinju. RASCAL: A domain specific language for source code analysis and manipulation. In SCAM, 2009. Google Scholar
  26. T. L. Lakshman and Uday S. Reddy. Typed Prolog: A semantic reconstruction of the Mycroft-O'Keefe type system. In ISLP, 1991. Google Scholar
  27. Mark Linton. Implementing relational views of programs. In SDE, 1984. Google Scholar
  28. Michael C. Martin, V. Benjamin Livshits, and Monica S. Lam. Finding application errors and security flaws using PQL: A program query language. In OOPSLA, 2005. Google Scholar
  29. Gregor Meyer. On types and type consistency in logic programming. Technical Report Informatik Berichte 199, FernUniversität Hagen, 1996. Google Scholar
  30. Todd D. Millstein, Christopher Frost, Jason Ryder, and Alessandro Warth. Expressive and modular predicate dispatch for java. TOPLAS, 31(2), 2009. Google Scholar
  31. Santanu Paul and Atul Prakash. A query algebra for program databases. TSE, 22(3), 1996. Google Scholar
  32. Teodor C. Przymusinski. On the declarative semantics of deductive databases and logic programs. In Foundations of Deductive Databases and Logic Programming. 1988. Google Scholar
  33. Max Schäfer and Oege de Moor. Type inference for Datalog with complex type hierarchies. In POPL, 2010. Google Scholar
  34. Damien Sereni, Pavel Avgustinov, and Oege de Moor. Adding magic to an optimising Datalog compiler. In SIGMOD, 2008. Google Scholar
  35. Yannis Smaragdakis and Martin Bravenboer. Using Datalog for fast and easy program analysis. In Datalog Reloaded, 2010. Google Scholar
  36. Gert Smolka and Hassan Aït-Kaci. Inheritance hierarchies: Semantics and unification. JSC, 7(3/4), 1989. Google Scholar
  37. Jeffrey D. Ullman. A comparison between deductive and object-oriented database systems. In DOOD, 1991. Google Scholar
  38. Raoul-Gabriel Urma and Alan Mycroft. Source-code queries with graph databases - with application to programming language usage and evolution. SCP, 97, 2015. Google Scholar
  39. Peter Wegner. Dimensions of object-based language design. In OOPSLA, 1987. Google Scholar
  40. John Whaley, Dzintars Avots, Michael Carbin, and Monica S. Lam. Using Datalog with binary decision diagrams for program analysis. In APLAS, 2005. Google Scholar
  41. Jiyang Xu and David S. Warren. Semantics of types in logic programming. Technical Report DPS-102, ECRC, Munich, 1990. Google Scholar
  42. Carlo Zaniolo. Object identity and inheritance in deductive databases - an evolutionary approach. In DOOD, 1989. Google Scholar
Questions / Remarks / Feedback

Feedback for Dagstuhl Publishing

Thanks for your feedback!

Feedback submitted

Could not send message

Please try again later or send an E-mail