-
Notifications
You must be signed in to change notification settings - Fork 10
Description
Describe the bug
I submitted a question in Discord -> EdgeDb -> edgedb-dotnet on Mon, 1/15/24
but no one has responded as of 1/16/24 14:58 PAC.
I've tried multiple options for using a tuple in an INSERT statement, but I keep getting different warnings returned from EdgeDB.
For Visual Studio 2022 C# .NET 7 code
$ edgedb --version
EdgeDB CLI 4.0.2+b26c502
Reproduction
Include the code that is causing the error:
Here is the default.esdl
type Artist {
required artistname: str {
constraint exclusive;
constraint min_len_value(3);
}
othernames: array<str>;
required wikipediapageid: int32;
birthdate: datetime;
familyname: tuple<first: str, middle: str, last: str>;
required multi genres: Genre;
multi labels: MusicCompanyLabel;
required timestamp: datetime;
}
Here is the C# code (below code is the multiple iterations I tried and the EdgeDB errors that were returned):
string familyNameFirst = "";
string familyNameMiddle = "";
string familyNameLast = "";
if (artist.FamilyName != null) {
familyNameFirst = string.Join(", ", artist.FamilyName.Item1);
familyNameMiddle = string.Join(", ", artist.FamilyName.Item2);
familyNameLast = string.Join(", ", artist.FamilyName.Item3);
}
try
{
var result = await _EdgeDBclient.QuerySingleAsync<Artist>(
" INSERT Artist " +
" { artistname := <str>$name, " +
" othernames := <array<str>>$onam, " +
" wikipediapageid := <int32>$wpid, " +
" birthdate := <datetime>$bdat, " +
" familyname := <tuple< first: <str>$fname, middle: <str>$mname, last: <str>$lname >>, " +
" genres := <array<str>>$genr, " +
" labels := <array<str>>$labl, " +
" timestamp := <datetime>$ptst } ",
new
{
name = artist.ArtistName,
onam = otherNamesString,
wpid = artist.WikipediaPageID,
bdat = artist.BirthDate,
fname = familyNameFirst,
mname = familyNameMiddle,
lname = familyNameLast,
genr = genreString,
labl = labelString,
ptst = artist.PageTimeStamp
});
}
catch (EdgeDB.EdgeDBErrorException ex)
{
Console.WriteLine($"{DateTime.Now} BandServer InsertArtistAsync for {artist.ArtistName}, WikiPageID {artist.WikipediaPageID} error from EdgeDB: ( {ex.Message} )");
return false;
}
Here are the various versions I've tried and the error returned:
// " familyname := tuple{ first := <str>$fname, middle := <str>$mname, last := <str>$lname }, " +
// object type or alias 'default::tuple' does not exist
//
// " familyname := { first := <str>$fname, middle := <str>$mname, last := <str>$lname }, " +
// invalid target for property 'familyname' of object type 'default::Artist': 'std::FreeObject'
// (expecting 'tuple<first: std::str, middle: std::str, last: std::str>')
//
// " familyname := tuple<first: <str>$fname, middle: <str>$mname, last: <str>$lname>, " +
// Unexpected ':'
//
// " familyname := tuple<first <str>$fname, middle <str>$mname, last <str>$lname>, " +
// Missing '['
//
// " familyname := { first := <str>$fname, middle := <str>$mname, last := <str>$lname }, " +
// invalid target for property 'familyname' of object type 'default::Artist':
// 'std::FreeObject' (expecting 'tuple<first: std::str, middle: std::str, last: std::str>')
//
// " familyname := { first := <str>$fname, middle := <str>$mname, last := <str>$lname }, " +
//
// " familyname := <tuple< first := $fname, middle := $mname, last := $lname >>, " +
// Unexpected ':='
//
// " familyname := <tuple< first := <str>$fname, middle := <str>$mname, last := <str>$lname >>, " +
// Unexpected ':='
//
//" familyname := <tuple< first : <str>$fname, middle : <str>$mname, last : <str>$lname >>, " +
// Missing keyword 'TYPE'
Expected behavior
Trying to not get and error and INSERT the C# tuple properly into the INSERT statement.
Versions (please complete the following information):
$ dotnet --version8.0.100
Frameworks
MicrosoftAspNetCoreApp
MicrosoftNETCoreApp
Packages
EdgeDB.Net.Driver (1.3.0)
MicrosoftAspNetCore.OpenApi (7.0.10)
Swashbuckle.AspNetCore (6.5.0)
System.Net.Http.Json (8.0.0)
- OS: Windows 11
- EdgeDB version:
- EdgeDB CLI version:
edgedb-netversion:- .NET version:
Additional context