본문으로 건너뛰기
버전: SDK-5.11.4

UpdateV2

public BackendReturnObject UpdateV2(string tableName, string inDate, string owner_inDate, Param param);

파라미터

ValueTypeDescription
tableNamestring업데이트를 할 테이블명
inDatestring업데이트를 할 row의 inDate 값
owner_inDatestring해당 row를 소유한 유저의 inDate
paramParam업데이트할 정보

설명

테이블에 저장되어 있는 값 중 inDate 컬럼의 값과 소유하는 유저의 owner_inDate가 일치하는 row를 검색하여 수정합니다.

  • 스키마 정의/미정의 여부 관계없이 데이터를 수정할 수 있습니다.
  • 자기 자신의 public/private 데이터를 수정할 수 있습니다.
  • 타인의 public 데이터를 수정할 수 있습니다.
  • 타인의 private 데이터를 수정할 수 없습니다.

    자신의 owner_inDate는 { Backend.UserInDate }를 통해 가져올 수 있습니다.

  • 숫자형 데이터의 경우, 최대 9007199254740991(약 9000조)까지 안전하게 값을 넣을 수 있습니다.
    그 이상의 데이터를 삽입할 경우, 일의 자리, 십의 자리 수는 0으로 내림처리가 됩니다.
    숫자가 증가하여 자리 수가 많아질수록 작은 수는 내림처리가 되며 큰수는 왼쪽 기준으로 16~18자리의 수까지 값이 유지됩니다.

    long의 경우 다음과 같이 데이터가 저장됩니다.

12345678912345678 -> 12345678912345678(9000조 이하, 기본값 유지)
123456789123456789 -> 123456789123456780(9000조 이상, 내림 처리 발생)
1234567891234567891 -> 1234567891234568000
9223372036854775807 -> 9223372036854776000(long의 최대값)

더 큰 데이터 저장을 위해 double로 정수를 저장할 경우 다음과 같이 표시됩니다.

12345678912345678912 -> 12345678912345678000(long의 최대값 보다 더 큰 double)
123456789123456789123.0 -> 123456789123456800000
1234567891234567891234.0 -> 123456789123456800000000
1.23456789123457E+29 -> 123456789123457000000000000000

해당 수를 클라이언트(C#)에서 받을 경우 지수형태로 변경이 될 수 있습니다.
12345678912345678000 -> 1.23456789123457E+19

param에 row 내 일부 컬럼만 존재할 경우 해당 컬럼만 수정됩니다.

  • param에 존재하지 않는 컬럼이 삭제되지 않습니다.

param에 row 내 존재하지 않는 컬럼이 존재할 경우 아래와 같이 동작합니다.

  • 스키마 미정의 테이블의 경우 row에 존재하지 않는 컬럼을 update 한 경우 새로운 컬럼이 추가됩니다.
  • 스키마 정의 테이블의 경우 스키마를 선언하지 않은 컬럼을 update 한 경우 에러가 발생합니다.

예약된 컬럼

저장 시, partition, gamer_id, inDate, updatedAt, sender, receiver, reservationDate, owner_inDate 8가지 필드는 서버에서 사용하는 컬럼입니다.
해당 컬럼이 param에 포함된 경우 에러가 발생합니다.

ValueDescription뒤끝 콘솔에서 노출 여부
partition서버에서 테이블을 구분하기 위해 사용하는 값입니다.X
gamer_idrow 소유자의 게이머 ID입니다.O
inDaterow의 inDate입니다.(key 값입니다.)O
updatedAt테이블이 마지막으로 수정된 시각입니다.O
sender뒤끝 기능을 위해 내부에서 사용하는 값입니다.(우편 등)X
receiver뒤끝 기능을 위해 내부에서 사용하는 값입니다.(우편 등)X
reservationDate뒤끝 기능을 위해 내부에서 사용하는 값입니다.(우편 등)X
owner_inDaterow 소유자의 유저 inDate입니다.O

owner_inDate 가 없는 구버전 테이블의 row의 경우 해당 함수를 이용하여 갱신하면 owner_inDate 컬럼이 추가됩니다.

Example

동기

// atk 컬럼의 값을 110으로 수정
Param param = new Param();
param.Add("atk", 110);

// 자신의 inDate의 row를 제거
Backend.GameData.UpdateV2("tableName", inDate, Backend.UserInDate, param);

// 타인의 inDate의 row를 제거
Backend.GameData.UpdateV2("tableName", inDate, "owner_inDate", param);

비동기

// atk 컬럼의 값을 110으로 수정
Param param = new Param();
param.Add("atk", 110);

// 자신의 inDate의 row를 제거
Backend.GameData.UpdateV2("tableName", inDate, Backend.UserInDate, param, (callback) =>
{
// 이후 처리
});

// 타인의 inDate의 row를 제거
Backend.GameData.UpdateV2("tableName", inDate, "owner_inDate", param, (callback) =>
{
// 이후 처리
});

SendQueue

// atk 컬럼의 값을 110으로 수정
Param param = new Param();
param.Add("atk", 110);

// 자신의 inDate의 row를 제거
SendQueue.Enqueue(Backend.GameData.UpdateV2, "tableName", inDate, Backend.UserInDate, param, (callback) =>
{
// 이후 처리
});

// 타인의 inDate의 row를 제거
SendQueue.Enqueue(Backend.GameData.UpdateV2, "tableName", inDate, "owner_inDate", param, (callback) =>
{
// 이후 처리
});

ReturnCase

Success cases

수정에 성공한 경우
statusCode : 204
message : Success

Error cases

(스키마) 스키마를 정의하지 않은 컬럼이 param에 포함된 경우
statusCode : 400
errorCode : BadParameterException
message : bad 컬럼이 존재하지 않습니다., 잘못된 컬럼이 존재하지 않습니다.

(스키마) 스키마를 정의할 때 선언한 컬럼의 데이터 타입과 update 하려는 컬럼의 데이터 타입이 다른 경우
statusCode : 400
errorCode : BadParameterException
message : bad {column 명} dataType, 잘못된 {column 명} dataType 입니다

(스키마) 스키마에 list 컬럼을 선언할 때 선택한 list의 크기와 param에 입력한 list의 크기가 다른 경우
statusCode : 400
errorCode : BadParameterException
message : bad list data length, 잘못된 list data length 입니다

(스키마) 스키마에 map 컬럼을 선언할 때 선택한 map의 크기와 param에 입력한 map의 크기가 다른 경우
statusCode : 400
errorCode : BadParameterException
message : bad map data length, 잘못된 map data length 입니다

연산하려는 column의 갯수가 총 290개를 넘을 경우
statusCode : 400
errorCode : ValidationException
message : Invalid UpdateExpression: Expression size has exceeded the maximum allowed size;

수정하려는 컬럼의 갯수가 총 290개를 넘을 경우
statusCode : 400
errorCode : ValidationException
message : Invalid UpdateExpression: Expression size has exceeded the maximum allowed size;

private 테이블에서 타인의 정보 수정하고자 하는 경우
statusCode : 403
errorCode : ForbiddenException
message : Forbidden Private table can only be modified by the owner, 금지된 Private table can only be modified by the owner

존재하지 않는 tableName인 경우
statusCode : 404
errorCode : NotFoundException
message : table not found, table을(를) 찾을 수 없습니다

존재하지 않는 inDate인 경우
statusCode : 404
errorCode : NotFoundException
message : gameInfo not found, gameInfo을(를) 찾을 수 없습니다

partition, gamer_id, inDate, updatedAt, sender, receiver, reservationDate, owner_inDate 8가지 필드가 param에 포함된 경우
statusCode : 405
errorCode : MethodNotAllowedParameterException
message : MethodNotAllowed {param value}, 이용할 수 없는 {param value}입니다

비활성화된 테이블의 수정을 시도한 경우
statusCode : 412
errorCode : PreconditionFailed
message : inactiveTable 사전 조건을 만족하지 않습니다.

업데이트할 데이터의 크기가 400KB를 넘는 경우
statusCode : 413
errorCode : ServerErrorException
message : request entity too large