Problem · Design

In-Memory SQL with CSV Initialization

Learn this problem
HardMicrosoft logoMicrosoftFULLTIMEONSITE INTERVIEW
See Microsoft hiring insights

Problem statement

Implement a small in-memory table engine that begins with a CSV string and then executes a sequence of SQL-like commands.

The first row of the CSV contains column names. Remaining rows contain data. Fields are comma-separated; quoted fields may contain commas and escaped double quotes.

Support the following commands:

  • SELECT col1,col2,... WHERE col=value: return matching rows with the selected columns joined by commas
  • INSERT value1,value2,...: append one row
  • DELETE WHERE col=value: delete every matching row

Process commands in order and return every output row produced by the SELECT commands.

Function

runInMemorySql(csv: String, commands: String[]) → String[]

Complete the function runInMemorySql in the editor below.

runInMemorySql has the following parameters:

  1. String csv: the initial table contents
  2. String[] commands: the commands to execute in order

Returns

String[]: the output rows produced by all SELECT commands, in order.

Examples

Example 1

csv = "name,age,city\nAlice,30,NY\nBob,25,SF"commands = ["SELECT name WHERE city=NY", "INSERT Charlie,22,NY", "SELECT name,age WHERE city=NY"]return = ["Alice", "Alice,30", "Charlie,22"]

The first query matches Alice. After inserting Charlie, the second query returns both NY rows in table order.

Example 2

csv = "name,age\nAlice,30\nBob,25"commands = ["DELETE WHERE name=Alice", "SELECT name,age WHERE age=25"]return = ["Bob,25"]

Deleting Alice leaves only Bob, who matches the final query.

Constraints

  • The total number of rows plus commands can be as large as 10^5.
  • Quoted CSV fields may contain commas and doubled quotes.
  • Only equality filters are required for this problem version.

More Microsoft problems

drafts saved locally
public String[] runInMemorySql(String csv, String[] commands) {
    // write your code here
}
csv"name,age,city\nAlice,30,NY\nBob,25,SF"
commands["SELECT name WHERE city=NY", "INSERT Charlie,22,NY", "SELECT name,age WHERE city=NY"]
expected["Alice", "Alice", "30", "Charlie", "22"]
checking account