Skip to content

WebGL: Queries appear to invalidate the database or delete records? #58

Closed
@NecroticNanite

Description

@NecroticNanite

Still investigating this, but adding it here now.

Using 1.2.2, I'm hitting an issue where my queries stop working.

Executing Query: SELECT 
                        product_skus.id as sku_id,
                        product_skus.price_usd as price_usd,
                        objects.display_name as object_name
                    FROM product_skus
                        
                    LEFT JOIN objects on product_skus.root_object = objects.id
                    
                    WHERE product_skus.id = 49
Executed query SkuTooltipQuery and retrieved 1 records.
...
Executing Query: SELECT 
                        product_skus.id as sku_id,
                        product_skus.price_usd as price_usd,
                        objects.display_name as object_name
                    FROM product_skus
                        
                    LEFT JOIN objects on product_skus.root_object = objects.id
                    
                    WHERE product_skus.id = 49
Executed query SkuTooltipQuery and retrieved 0 records.

Executing the same query - the first result is correct, returning a single record. The second query returns zero records. This is happening for all queries. It's almost like each query is deleting records or invalidating the state of the database.

Query:

public struct SkuTooltipQuery : IQuery<SkuTooltipQuery.SQL_TooltipResponse>
{
    [Preserve]
    public class SQL_TooltipResponse
    {
        [PrimaryKey, AutoIncrement, Preserve]
        public int id { get; set; }
        [Preserve]
        public string object_name { get; set; }
        [Preserve]
        public float price_usd { get; set; }
    }
    
    private int m_skuId;
    public SkuTooltipQuery(int skuId)
    {
        m_skuId = skuId;
    }
    
    public List<SQL_TooltipResponse> Execute(SQLiteConnection database)
    {
        string query =
            $@"SELECT 
                    product_skus.id as sku_id,
                    product_skus.price_usd as price_usd,
                    objects.display_name as object_name
                FROM product_skus
                    
                LEFT JOIN objects on product_skus.root_object = objects.id
                    
                WHERE product_skus.id = {m_skuId}";
        return database.Query<SQL_TooltipResponse>(query);
    }
}

Execution code:

public List<T> ExecuteQuery<T>(IQuery<T> query)
{
    var result = query.Execute(m_connection);
    if (m_connection.Trace)
    {
        Debug.Log($"Executed query {query.GetType().Name} and retrieved {result.Count} records.");
    }
    return result;
}

Database load code:

string url = SQLPathResolver.ResolvePath();
UnityWebRequest request = UnityWebRequest.Get(url);
UnityWebRequest response = await request.SendWebRequest();

var db = new SQLiteConnection("localdb", SQLiteOpenFlags.ReadOnly);
db.Deserialize(response.downloadHandler.data, null, SQLite3.DeserializeFlags.ReadOnly);

m_connection = db;

I load the database once at boot.

Will be testing previous versions (before the Unity WebGL changes) and testing re-loading the database before each query.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions