executeWrite method

Future<int> executeWrite(
  1. String query, {
  2. List<SqlParameter>? parameters,
})

Execute a write operation via the backend API

Implementation

Future<int> executeWrite(
  String query, {
  List<SqlParameter>? parameters,
}) async {
  _ensureConfigured();

  try {
    final response = await http.post(
      Uri.parse('${_apiBaseUrl}execute'),
      headers: {
        'Content-Type': 'application/json',
        if (_authToken != null) 'Authorization': 'Bearer $_authToken',
      },
      body: jsonEncode({
        'query': query,
        if (parameters != null)
          'parameters': parameters
              .map((p) => {
                    'name': p.name,
                    'value': p.value,
                    'type': p.type?.sqlTypeName,
                  })
              .toList(),
      }),
    );

    if (response.statusCode == 200) {
      final result = jsonDecode(response.body);
      return (result['affected'] as num?)?.toInt() ?? 0;
    } else {
      throw QueryException(
        'Write operation failed',
        query: query,
        details: 'HTTP ${response.statusCode}: ${response.body}',
      );
    }
  } catch (e) {
    if (e is QueryException) rethrow;
    throw QueryException(
      'Write operation failed',
      query: query,
      details: e.toString(),
    );
  }
}