  Columnar databases are an established way to speed up online analytical
processing (OLAP) queries. Nowadays, data processing (e.g., storage,
visualization, and analytics) is often performed at the programming language
level, hence it is desirable to also adopt columnar data structures for common
language runtimes. While there are frameworks, libraries, and APIs to enable
columnar data stores in programming languages, their integration into
applications typically requires developer interference. In prior work,
researchers implemented an approach for *automated* transformation of arrays
into columnar arrays in the GraalVM JavaScript runtime. However, this approach
suffers from performance issues on smaller workloads as well as on more complex
nested data structures. We find that the key to optimizing accesses to columnar
arrays is to identify queries and apply specific optimizations to them. In this
paper, we describe novel compiler optimizations in the GraalVM Compiler that
optimize queries on columnar arrays. At JIT compile time, we identify loops
that access potentially columnar arrays and duplicate them in order to
specifically optimize accesses to columnar arrays. Additionally, we describe a
new approach for creating columnar arrays from arrays consisting of complex
objects by performing **multi-level storage transformation**. We demonstrate
our approach via an implementation for JavaScript `Date` objects.
  [ full abstract at https://doi.org/10.22152/programming-journal.org/2023/7/9
]
