고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.
커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.
문의 응대 : 평일 오전 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}");
}
}
});
}
});
}
}