module mars.protoinsertvaluerequest;


import std.conv;

import mars.client;
import mars.msg;
import mars.server : indexStatementFor;

void protoInsertValueRequest(S)(MarsClient* client, S socket)
{
    import msgpack : unpack, pack;

    auto insertValueRequest = socket.binaryAs!InsertValuesRequest;

    int tableIndex = insertValueRequest.statementIndex;

    InsertError err;
    auto reply = client.vueInsertRecord(insertValueRequest.statementIndex, insertValueRequest.bytes, err);
    
    auto replyMsg = InsertValuesReply(
        cast(int)(err), 
        reply[0], 
        reply[1], 
        tableIndex,
        err == InsertError.inserted? indexStatementFor(tableIndex, "update").to!int : indexStatementFor(tableIndex, "delete").to!int, 
    );
    socket.sendReply(insertValueRequest, replyMsg);
}