뒤끝 데이터베이스 where문에서 list.contains시 에러 관련 문의입니다.

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 베이스/채팅/데이터베이스/월드 SDK 버전 : base : 5.18.10, Database : 0.0.18
  • 프로젝트명 :
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 : Exception: Query failed: failed to build WHERE clause: unsupported operator: IN

안녕하세요. 뒤끝 데이터베이스 이용 중 에러가 발생하여 문의 드립니다.

---- unity error messages ----
Exception: Query failed: failed to build WHERE clause: unsupported operator: IN
BACKND.Database.BTask1[T].get_Result () (at ./Library/PackageCache/com.backnd.database@0.0.18/Tools/BTask.cs:460) BACKND.Database.BTaskAwaiter1[T].GetResult () (at ./Library/PackageCache/com.backnd.database@0.0.18/Tools/BTask.cs:656)
BackEndTester+<>c.b__2_1 (BackEnd.BackendReturnObject loginBro) (at Assets/BackEndTester.cs:73)
System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.b__7_0 (System.Object state) (at <31687ccd371e4dc6b0c23a1317cf9474>:0)
UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at <6ff3bcb667574bf9a8630184172fcfbf>:0)
UnityEngine.UnitySynchronizationContext.Exec () (at <6ff3bcb667574bf9a8630184172fcfbf>:0)
UnityEngine.UnitySynchronizationContext.ExecuteTasks () (at <6ff3bcb667574bf9a8630184172fcfbf>:0)


해당 코드로 특정 유저들의 데이터를 받아오려고 하였을때 발생되었습니다.
List nicknames = new List() { “TestUser_99”, “TestUser_100” }
List userList = await DBClient.From()
Where(x => nicknames.Contains(x.Nickname)) // @@@@ 해당부분 제거시 정상 작동(모든 유저 정보를 가져오는 코드가 됨)
.ToList();


뒤끝 개발자 문서 > 데이터베이스 > Unity SDK > 지원하는 연산자
문서에 있는 방법대로 접근하였고 해당 문서에 참고한 스크립트는

실제 사용 예시:

// 특정 유저명 목록으로 조회
var usernames = new List { “player1”, “player2”, “admin” };
var users = await DBClient.From()
.Where(x => usernames.Contains(x.Username))
.ToList();

입니다.


이하 테스트 코드 전문입니다

테스트로 사용한 스크립트 입니다

using BackEnd;
using BACKND.Database;
using Cysharp.Threading.Tasks;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

[Table("users", TableType.UserTable, ClientAccess = true, ReadPermissions = new[] { TablePermission.SELF, TablePermission.OTHERS }, WritePermissions = new[] { TablePermission.SELF })]
public class Users : BaseModel
{
    [PrimaryKey]
    [Column("nickname", DatabaseType.String, NotNull = true, DefaultValue = "default")]
    public string Nickname { get; set; } = "default";

    [Column("iconid", DatabaseType.String, NotNull = true, DefaultValue = "default")]
    public string Iconid { get; set; } = "default";

    [Column("bannerid", DatabaseType.String, NotNull = true, DefaultValue = "default")]
    public string Bannerid { get; set; } = "default";

    [Column("displayname", DatabaseType.String, NotNull = true, DefaultValue = "deafult_nickname")]
    public string Displayname { get; set; } = "deafult_nickname";
}

public class BackEndTester : MonoBehaviour
{
    private async void Start()
    {
        await UniTask.Delay(2000);

        InitializeDatabase();
    }

    public static Client DBClient;

    public void InitializeDatabase()
    {
        // 1. 뒤끝 초기화 및 로그인 (선행 필수)
        Backend.InitializeAsync(bro =>
        {
            if (bro.IsSuccess())
            {
                string id = "testid";
                string pw = "password";

                Backend.BMember.CustomLogin(id, pw, async loginBro =>
                {
                    //Debug.Log("로그인 완료");
                    if (loginBro.IsSuccess())
                    {
                        // 2. 데이터베이스 클라이언트 생성
                        // 뒤끝 콘솔 > 데이터베이스 관리 메뉴에서 발급받은 DB UUID를 입력하세요.
                        DBClient = new Client("uuid");

                        // 3. 데이터베이스 초기화
                        await DBClient.Initialize();

                        //Debug.Log("데이터베이스 초기화 완료");

                        List<string> nicknames = new List<string>() { "TestUserID_99", "TestUserID_100" };

                        List<Users> userList = await DBClient.From<Users>()
                            .Where(x => nicknames.Contains(x.Nickname))  // @@@@ 해당부분 제거시 정상 작동(모든 유저 정보를 가져오는 코드가 됨)
                            .ToList()
                            ;

                        foreach (Users u in userList)
                        {
                            Debug.Log($" :::: {u.Nickname}");
                        }
                    }
                });
            }
        });
    }
}

안녕하세요 개발자님,
문의해 주신 내용과 관련해 확인 후 안내드릴 수 있도록 하겠습니다.
답변 안내까지 다소 소요될 수 있는 점 양해 바랍니다.

확인 시, 해당 쿼리는 안정성 문제로 인해 지원되지 않도록 설정되어 있었던 것으로 확인되었습니다.

내부 테스트 및 검증을 진행하여 현재는 정상적으로 이용하실 수 있도록 조치하였습니다.
다시 시도하여 이용해 주시면 감사하겠습니다.
이용 과정에서 동일한 문제가 발생하거나 추가 문의 사항이 있으신 경우 회신해 주시면 확인 후 안내드리겠습니다.