/*
* DBeaver - Universal Database Manager
* Copyright (C) 2017 Andrew Khitrin (ahitrin@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.ext.postgresql.model.lock;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import org.jkiss.dbeaver.model.admin.locks.DBAServerLock;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.meta.Property;
public class PostgreLock implements DBAServerLock<Integer>{
private int wait_pid;
private String wait_user;
private int hold_pid;
private String hold_user;
private String wait_statement;
private String statement_in;
DBAServerLock<Integer> hold = null;
List<DBAServerLock<Integer>> waiters = new ArrayList<>(0);
public PostgreLock(ResultSet dbResult) {
this.wait_pid = JDBCUtils.safeGetInt(dbResult, "blocked_pid");
this.wait_user = JDBCUtils.safeGetString(dbResult, "blocked_user");
this.hold_pid = JDBCUtils.safeGetInt(dbResult, "blocking_pid");
this.hold_user = JDBCUtils.safeGetString(dbResult, "blocking_user");
this.wait_statement = JDBCUtils.safeGetString(dbResult, "blocked_statement");
this.statement_in = JDBCUtils.safeGetString(dbResult, "statement_in");
}
@Property(viewable = true, order = 1)
public int getWait_pid() {
return wait_pid;
}
@Property(viewable = true, order = 2)
public String getWait_user() {
return wait_user;
}
@Property(viewable = true, order = 3)
public int getHold_pid() {
return hold_pid;
}
@Property(viewable = true, order = 4)
public String getHold_user() {
return hold_user;
}
@Property(viewable = true, order = 5)
public String getWait_statement() {
return wait_statement;
}
@Property(viewable = true, order = 6)
public String getStatement_in() {
return statement_in;
}
@Override
public String getTitle() {
return String.valueOf(wait_pid);
}
@Override
public DBAServerLock<Integer> getHoldBy() {
return hold;
}
public DBAServerLock<Integer> getHold() {
return hold;
}
@Override
public Integer getId() {
return wait_pid;
}
@Override
public List<DBAServerLock<Integer>> waitThis() {
return this.waiters;
}
@Override
public Integer getHoldID() {
return hold_pid;
}
@SuppressWarnings("unchecked")
@Override
public void setHoldBy(DBAServerLock<?> lock) {
this.hold = (DBAServerLock<Integer>) lock;
}
@Override
public String toString() {
return String.format("Wait - %d (%s) Hold - %d (%s)", wait_pid,wait_user,hold_pid,hold_user);
}
}