Skip to content

Error Reference ​

This page documents common errors you may encounter when using loq, organized by category with explanations and solutions.

Parse Errors ​

Parse errors occur when loq cannot understand your SQL query.

SQL Syntax Error ​

Error: SQL syntax error: Expected end of statement, found: xyz

Cause: The SQL query contains invalid syntax that the parser cannot understand.

Solutions:

bash
# Missing quotes around string values
# Wrong:
loq "SELECT * FROM data.csv WHERE name = Alice"

# Correct:
loq "SELECT * FROM data.csv WHERE name = 'Alice'"
bash
# Missing commas between columns
# Wrong:
loq "SELECT name age city FROM data.csv"

# Correct:
loq "SELECT name, age, city FROM data.csv"

Unexpected Token ​

Error: SQL syntax error: Unexpected token 'FROM' at position 12

Cause: The parser encountered a keyword or token in an unexpected location.

Solutions:

bash
# Reserved word used as column name - use quotes
# Wrong:
loq "SELECT select, from FROM data.csv"

# Correct:
loq "SELECT \"select\", \"from\" FROM data.csv"
bash
# Missing expression after operator
# Wrong:
loq "SELECT * FROM data.csv WHERE age >"

# Correct:
loq "SELECT * FROM data.csv WHERE age > 30"

Missing FROM Clause ​

Error: Missing required clause: FROM

Cause: A SELECT statement must specify a data source with FROM.

Solution:

bash
# Wrong:
loq "SELECT name, age"

# Correct:
loq "SELECT name, age FROM users.csv"

Invalid Column Name ​

Error: Invalid column: column name cannot be empty

Cause: An empty or invalid column name was specified.

Solutions:

bash
# Extra comma creates empty column reference
# Wrong:
loq "SELECT name, , age FROM data.csv"

# Correct:
loq "SELECT name, age FROM data.csv"
bash
# Trailing comma after last column
# Wrong:
loq "SELECT name, age, FROM data.csv"

# Correct:
loq "SELECT name, age FROM data.csv"

Unterminated String Literal ​

Error: SQL syntax error: Unterminated string literal

Cause: A string value is missing its closing quote.

Solutions:

bash
# Missing closing quote
# Wrong:
loq "SELECT * FROM data.csv WHERE name = 'Alice"

# Correct:
loq "SELECT * FROM data.csv WHERE name = 'Alice'"
bash
# Use doubled quotes to escape quotes inside strings
# Wrong:
loq "SELECT * FROM data.csv WHERE desc = 'It's great'"

# Correct:
loq "SELECT * FROM data.csv WHERE desc = 'It''s great'"

File Errors ​

File errors occur when loq cannot access or read input files.

File Not Found ​

Error: I/O error: No such file or directory (os error 2)

Cause: The specified file does not exist or the path is incorrect.

Solutions:

bash
# Check the file exists
ls -la data.csv

# Use absolute path if relative path isn't working
loq "SELECT * FROM /full/path/to/data.csv"

# Check for typos in filename
loq "SELECT * FROM users.csv"  # not user.csv

Permission Denied ​

Error: I/O error: Permission denied (os error 13)

Cause: The current user does not have read permission for the file.

Solutions:

bash
# Check file permissions
ls -la data.csv

# Grant read permission
chmod +r data.csv

# Run with appropriate privileges for system files
sudo loq -i:EVTX "SELECT * FROM /var/log/system.evtx"

Invalid File Format ​

Error: Invalid data: Unable to detect file format

Cause: The file contents do not match the expected format.

Solutions:

bash
# Specify the correct input format explicitly
loq -i:TSV "SELECT * FROM data.txt"  # if tab-delimited

# Check if file is actually the expected format
head -5 data.csv

# For binary files, use the correct format
loq -i:EVTX "SELECT * FROM events.evtx"

Encoding Issues ​

Error: Invalid data: invalid UTF-8 sequence

Cause: The file contains non-UTF-8 characters.

Solutions:

bash
# Specify the correct encoding
loq -i:CSV -iCodepage:LATIN1 "SELECT * FROM data.csv"

# Common encodings:
loq -i:CSV -iCodepage:1252 "SELECT * FROM windows_data.csv"   # Windows-1252
loq -i:CSV -iCodepage:ISO-8859-1 "SELECT * FROM european.csv" # Latin-1

Path with Spaces ​

Error: I/O error: No such file or directory (os error 2)

Cause: File paths containing spaces need special handling.

Solutions:

bash
# Quote the path inside the SQL query
loq "SELECT * FROM 'My Documents/data.csv'"

# Or escape spaces in the shell
loq "SELECT * FROM My\ Documents/data.csv"

# Using double quotes for the path
loq "SELECT * FROM \"My Documents/data.csv\""

Type Errors ​

Type errors occur when operations are performed on incompatible data types.

Type Mismatch in Comparison ​

Error: Type mismatch: expected Integer, found String

Cause: Comparing values of incompatible types without conversion.

Solutions:

bash
# Comparing number to string - remove quotes
# Wrong:
loq "SELECT * FROM data.csv WHERE age = '30'"

# Correct:
loq "SELECT * FROM data.csv WHERE age = 30"
bash
# Cast values to the correct type
loq "SELECT * FROM data.csv WHERE CAST(id AS INTEGER) = 100"

Cannot Convert to Number ​

Error: Type error: cannot convert 'abc' to number

Cause: Attempting to use a non-numeric value in a numeric operation.

Solutions:

bash
# Filter out non-numeric values first
loq "SELECT * FROM data.csv WHERE amount != '' AND amount NOT LIKE '%[^0-9]%'"

# Use COALESCE to handle NULLs
loq "SELECT COALESCE(CAST(amount AS INTEGER), 0) FROM data.csv"

Invalid Date Format ​

Error: Type error: cannot parse date from 'invalid-date'

Cause: The date string does not match the expected format.

Solutions:

bash
# Specify the correct date format
loq "SELECT TO_TIMESTAMP(date_col, '%Y-%m-%d') FROM data.csv"

# Common format patterns:
# %Y-%m-%d         -> 2024-01-15
# %Y-%m-%d %H:%M:%S -> 2024-01-15 14:30:00
# %d/%m/%Y         -> 15/01/2024
# %m/%d/%Y         -> 01/15/2024

NULL Handling Issues ​

Error: Type error: cannot perform operation on NULL value

Cause: NULL values cannot be used directly in some operations.

Solutions:

bash
# Use COALESCE to provide default values
loq "SELECT COALESCE(email, 'unknown') FROM users.csv"

# Filter out NULLs
loq "SELECT * FROM data.csv WHERE value IS NOT NULL"

# Use NULLIF to convert values to NULL
loq "SELECT NULLIF(status, '') FROM data.csv"

Execution Errors ​

Execution errors occur during query processing.

Column Not Found ​

Error: Column not found: 'username'

Cause: The specified column does not exist in the data source.

Solutions:

bash
# Check available columns by selecting all
loq "SELECT * FROM data.csv LIMIT 1"

# Column names are case-sensitive in some contexts
loq "SELECT UserName FROM data.csv"  # Try exact case

# Use quotes for columns with special characters
loq "SELECT \"user-name\" FROM data.csv"

Ambiguous Column Reference ​

Error: Execution error: ambiguous column reference: 'id'

Cause: When joining tables, both have a column with the same name.

Solutions:

bash
# Qualify column names with table alias
loq "SELECT u.id, o.id AS order_id
     FROM users.csv u
     JOIN orders.csv o ON u.id = o.user_id"

# Or use explicit table names
loq "SELECT users.id, orders.id
     FROM users.csv AS users
     JOIN orders.csv AS orders ON users.id = orders.user_id"

Division by Zero ​

Error: Division by zero

Cause: Attempting to divide by zero.

Solutions:

bash
# Use NULLIF to avoid division by zero
loq "SELECT total / NULLIF(count, 0) AS average FROM data.csv"

# Filter out zero values
loq "SELECT total / count AS average FROM data.csv WHERE count > 0"

# Use CASE to handle zero
loq "SELECT CASE WHEN count = 0 THEN 0 ELSE total / count END AS average
     FROM data.csv"

Invalid Regex Pattern ​

Error: Invalid data: regex parse error

Cause: The LIKE pattern or regex contains invalid syntax.

Solutions:

bash
# Escape special regex characters
# Wrong (unescaped parentheses):
loq "SELECT * FROM data.csv WHERE name LIKE '%(test)%'"

# Correct:
loq "SELECT * FROM data.csv WHERE name LIKE '%test%'"
bash
# For TEXTLINE with regex, ensure valid pattern
loq -i:TEXTLINE -iRegex:"^(?P<ip>\\d+\\.\\d+\\.\\d+\\.\\d+)" \
    "SELECT ip FROM access.log"

Aggregate in Wrong Context ​

Error: Invalid aggregate: aggregate function 'COUNT' not allowed in WHERE clause

Cause: Aggregate functions cannot be used in WHERE; use HAVING instead.

Solutions:

bash
# Wrong - aggregate in WHERE:
loq "SELECT department FROM employees.csv
     WHERE COUNT(*) > 5
     GROUP BY department"

# Correct - use HAVING for aggregate conditions:
loq "SELECT department FROM employees.csv
     GROUP BY department
     HAVING COUNT(*) > 5"
bash
# Wrong - non-aggregated column without GROUP BY:
loq "SELECT name, COUNT(*) FROM employees.csv"

# Correct - include in GROUP BY or use aggregate:
loq "SELECT name, COUNT(*) FROM employees.csv GROUP BY name"

Format-Specific Errors ​

CSV Parsing Errors ​

Mismatched Column Count ​

Error: Schema mismatch: expected 5 columns, got 3

Cause: A row has a different number of fields than the header.

Solutions:

bash
# Check the problematic rows
loq "SELECT * FROM data.csv" 2>&1 | head -20

# Ensure proper quoting for fields containing delimiters
# Wrong in CSV:
# name,description,price
# Widget,A small, useful item,9.99

# Correct:
# name,description,price
# Widget,"A small, useful item",9.99

Bad Quoting ​

Error: CSV error: found record with X fields, but the previous record has Y fields

Cause: Inconsistent quoting in the CSV file.

Solutions:

bash
# Check for unbalanced quotes
grep -n '"' data.csv | head -20

# Escape quotes by doubling them
# Wrong:
# "He said "hello""

# Correct:
# "He said ""hello"""

JSON Parsing Errors ​

Invalid JSON Syntax ​

Error: Invalid data: expected value at line 1 column 1

Cause: The file is not valid JSON.

Solutions:

bash
# Validate JSON format
cat data.json | python -m json.tool

# For NDJSON (newline-delimited), ensure each line is valid JSON
loq -i:JSON "SELECT * FROM data.ndjson"

Missing Fields ​

Error: Column not found: 'user.email'

Cause: Nested JSON field does not exist or has different structure.

Solutions:

bash
# Check available fields
loq -i:JSON "SELECT * FROM data.json LIMIT 1"

# Handle missing nested fields with COALESCE
loq -i:JSON "SELECT COALESCE(user_email, 'none') FROM data.json"

W3C Log Format Issues ​

Invalid Header Format ​

Error: Invalid data: W3C log missing #Fields directive

Cause: The W3C log file is missing the required header line.

Solutions:

bash
# Check the file header
head -10 access.log

# W3C logs should start with directives like:
# #Software: Microsoft Internet Information Services
# #Version: 1.0
# #Fields: date time s-ip cs-method cs-uri-stem ...

# If using a partial log file, specify fields manually
loq -i:W3C -iFields:"date time s-ip cs-method cs-uri-stem" \
    "SELECT * FROM access.log"

EVTX Access Issues ​

Cannot Read Event Log ​

Error: I/O error: Permission denied

Cause: Windows Event Log files often require elevated privileges.

Solutions:

bash
# On Windows, run as Administrator
# Or copy the file to an accessible location
copy C:\Windows\System32\winevt\Logs\Security.evtx C:\temp\

# On Linux/macOS reading exported .evtx files:
loq -i:EVTX "SELECT * FROM exported_events.evtx"

Corrupted Event Log ​

Error: Invalid data: EVTX file header invalid

Cause: The .evtx file is corrupted or truncated.

Solutions:

bash
# Verify file integrity
file events.evtx

# Export a fresh copy using Windows Event Viewer
# Or use wevtutil:
wevtutil epl System C:\temp\system.evtx

Output Errors ​

Cannot Write to File ​

Error: I/O error: Permission denied (os error 13)

Cause: Cannot write to the specified output file or directory.

Solutions:

bash
# Check directory permissions
ls -la /path/to/output/

# Specify a writable location
loq -o:JSON --ofile:~/output/results.json \
    "SELECT * FROM data.csv"

# Create the output directory first
mkdir -p /path/to/output

Database Connection Failed ​

Error: SQLite error: unable to open database file

Cause: Cannot create or access the SQLite database file.

Solutions:

bash
# Ensure the directory exists and is writable
mkdir -p /path/to/db/

# Check disk space
df -h

# Use a different path
loq -o:SQLITE --ofile:/tmp/results.db \
    "SELECT * FROM data.csv"

Invalid Output Format ​

Error: Unknown output format: 'EXCEL'

Cause: The specified output format is not supported.

Solutions:

bash
# Supported output formats:
# CSV, TSV, JSON, XML, DATAGRID, SQLITE, CHART, NAT, PARQUET, CLOUDWATCH

# List of valid formats
loq --help

# Use CSV and convert externally for unsupported formats
loq -o:CSV --ofile:output.csv "SELECT * FROM data.csv"

Getting Help ​

If you encounter an error not covered here:

  1. Check the full error message - loq provides detailed error information
  2. Verify your input - use LIMIT 1 to test with minimal data
  3. Check file formats - use head or file commands to inspect files
  4. Search the documentation - use the search feature on this site
  5. Report issues - GitHub Issues

Debug Mode ​

For additional debugging information:

bash
# Enable verbose output
loq --stats "SELECT * FROM data.csv"

# Check what columns are available
loq "SELECT * FROM data.csv LIMIT 1"

# Test with simpler queries first
loq "SELECT * FROM data.csv LIMIT 5"
loq "SELECT name FROM data.csv LIMIT 5"
loq "SELECT name FROM data.csv WHERE age > 30 LIMIT 5"

All rights reserved.