Package org.h2.server.pg
Class PgServer
- java.lang.Object
-
- org.h2.server.pg.PgServer
-
- All Implemented Interfaces:
Service
public class PgServer extends java.lang.Object implements Service
This class implements a subset of the PostgreSQL protocol as described here: https://www.postgresql.org/docs/devel/protocol.html The PostgreSQL catalog is described here: https://www.postgresql.org/docs/7.4/catalogs.html
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
allowOthers
private java.lang.String
baseDir
static int
DEFAULT_PORT
The default port to use for the PG server.private boolean
ifExists
private boolean
isDaemon
private java.lang.String
key
private java.lang.String
keyDatabase
static int
PG_TYPE_BOOL
static int
PG_TYPE_BPCHAR
static int
PG_TYPE_BYTEA
static int
PG_TYPE_DATE
static int
PG_TYPE_FLOAT4
static int
PG_TYPE_FLOAT8
static int
PG_TYPE_INT2
static int
PG_TYPE_INT2_ARRAY
static int
PG_TYPE_INT4
static int
PG_TYPE_INT4_ARRAY
static int
PG_TYPE_INT8
static int
PG_TYPE_NUMERIC
static int
PG_TYPE_TEXT
static int
PG_TYPE_TIME
static int
PG_TYPE_TIMESTAMP
static int
PG_TYPE_TIMESTAMPTZ
static int
PG_TYPE_TIMETZ
static int
PG_TYPE_UNKNOWN
static int
PG_TYPE_VARCHAR
The VARCHAR type.static int
PG_TYPE_VARCHAR_ARRAY
private java.util.concurrent.atomic.AtomicInteger
pid
private int
port
private boolean
portIsSet
private java.util.Set<PgServerThread>
running
private java.net.ServerSocket
serverSocket
private boolean
stop
private boolean
trace
private java.util.HashSet<java.lang.Integer>
typeSet
-
Constructor Summary
Constructors Constructor Description PgServer()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private boolean
allow(java.net.Socket socket)
java.lang.String
checkKeyAndGetDatabaseName(java.lang.String db)
If no key is set, return the original database name.(package private) void
checkType(int type)
Check whether a data type is supported.static int
convertType(TypeInfo type)
Convert the SQL type to a PostgreSQL typestatic java.lang.String
formatType(int pgType)
Returns the name of the given type.boolean
getAllowOthers()
Check if remote connections are allowed.(package private) java.lang.String
getBaseDir()
(package private) boolean
getIfExists()
java.lang.String
getName()
Get the human readable name of the service.int
getPort()
Gets the port this service is listening on.(package private) PgServerThread
getThread(int processId)
Get the thread with the given process id.(package private) boolean
getTrace()
java.lang.String
getType()
Get the human readable short name of the service.(package private) java.util.HashSet<java.lang.Integer>
getTypeSet()
Get the type hash set.java.lang.String
getURL()
Get the URL of this service in a human readable formvoid
init(java.lang.String... args)
Initialize the service from command line options.boolean
isDaemon()
Check if a daemon thread should be used.boolean
isRunning(boolean traceError)
Check if the service is running.void
listen()
Listen for incoming connections.(package private) void
remove(PgServerThread t)
Remove a thread from the list.void
start()
Start the service.void
stop()
Stop the service.(package private) void
trace(java.lang.String s)
Print a message if the trace flag is enabled.(package private) void
traceError(java.lang.Exception e)
Print the stack trace if the trace flag is enabled.
-
-
-
Field Detail
-
DEFAULT_PORT
public static final int DEFAULT_PORT
The default port to use for the PG server. This value is also in the documentation and in the Server javadoc.- See Also:
- Constant Field Values
-
PG_TYPE_VARCHAR
public static final int PG_TYPE_VARCHAR
The VARCHAR type.- See Also:
- Constant Field Values
-
PG_TYPE_BOOL
public static final int PG_TYPE_BOOL
- See Also:
- Constant Field Values
-
PG_TYPE_BYTEA
public static final int PG_TYPE_BYTEA
- See Also:
- Constant Field Values
-
PG_TYPE_BPCHAR
public static final int PG_TYPE_BPCHAR
- See Also:
- Constant Field Values
-
PG_TYPE_INT8
public static final int PG_TYPE_INT8
- See Also:
- Constant Field Values
-
PG_TYPE_INT2
public static final int PG_TYPE_INT2
- See Also:
- Constant Field Values
-
PG_TYPE_INT4
public static final int PG_TYPE_INT4
- See Also:
- Constant Field Values
-
PG_TYPE_TEXT
public static final int PG_TYPE_TEXT
- See Also:
- Constant Field Values
-
PG_TYPE_FLOAT4
public static final int PG_TYPE_FLOAT4
- See Also:
- Constant Field Values
-
PG_TYPE_FLOAT8
public static final int PG_TYPE_FLOAT8
- See Also:
- Constant Field Values
-
PG_TYPE_UNKNOWN
public static final int PG_TYPE_UNKNOWN
- See Also:
- Constant Field Values
-
PG_TYPE_INT2_ARRAY
public static final int PG_TYPE_INT2_ARRAY
- See Also:
- Constant Field Values
-
PG_TYPE_INT4_ARRAY
public static final int PG_TYPE_INT4_ARRAY
- See Also:
- Constant Field Values
-
PG_TYPE_VARCHAR_ARRAY
public static final int PG_TYPE_VARCHAR_ARRAY
- See Also:
- Constant Field Values
-
PG_TYPE_DATE
public static final int PG_TYPE_DATE
- See Also:
- Constant Field Values
-
PG_TYPE_TIME
public static final int PG_TYPE_TIME
- See Also:
- Constant Field Values
-
PG_TYPE_TIMETZ
public static final int PG_TYPE_TIMETZ
- See Also:
- Constant Field Values
-
PG_TYPE_TIMESTAMP
public static final int PG_TYPE_TIMESTAMP
- See Also:
- Constant Field Values
-
PG_TYPE_TIMESTAMPTZ
public static final int PG_TYPE_TIMESTAMPTZ
- See Also:
- Constant Field Values
-
PG_TYPE_NUMERIC
public static final int PG_TYPE_NUMERIC
- See Also:
- Constant Field Values
-
typeSet
private final java.util.HashSet<java.lang.Integer> typeSet
-
port
private int port
-
portIsSet
private boolean portIsSet
-
stop
private boolean stop
-
trace
private boolean trace
-
serverSocket
private java.net.ServerSocket serverSocket
-
running
private final java.util.Set<PgServerThread> running
-
pid
private final java.util.concurrent.atomic.AtomicInteger pid
-
baseDir
private java.lang.String baseDir
-
allowOthers
private boolean allowOthers
-
isDaemon
private boolean isDaemon
-
ifExists
private boolean ifExists
-
key
private java.lang.String key
-
keyDatabase
private java.lang.String keyDatabase
-
-
Method Detail
-
init
public void init(java.lang.String... args)
Description copied from interface:Service
Initialize the service from command line options.
-
getTrace
boolean getTrace()
-
trace
void trace(java.lang.String s)
Print a message if the trace flag is enabled.- Parameters:
s
- the message
-
remove
void remove(PgServerThread t)
Remove a thread from the list.- Parameters:
t
- the thread to remove
-
traceError
void traceError(java.lang.Exception e)
Print the stack trace if the trace flag is enabled.- Parameters:
e
- the exception
-
getURL
public java.lang.String getURL()
Description copied from interface:Service
Get the URL of this service in a human readable form
-
getPort
public int getPort()
Description copied from interface:Service
Gets the port this service is listening on.
-
allow
private boolean allow(java.net.Socket socket)
-
start
public void start()
Description copied from interface:Service
Start the service. This usually means create the server socket. This method must not block.
-
listen
public void listen()
Description copied from interface:Service
Listen for incoming connections. This method blocks.
-
stop
public void stop()
Description copied from interface:Service
Stop the service.
-
isRunning
public boolean isRunning(boolean traceError)
Description copied from interface:Service
Check if the service is running.
-
getThread
PgServerThread getThread(int processId)
Get the thread with the given process id.- Parameters:
processId
- the process id- Returns:
- the thread
-
getBaseDir
java.lang.String getBaseDir()
-
getAllowOthers
public boolean getAllowOthers()
Description copied from interface:Service
Check if remote connections are allowed.- Specified by:
getAllowOthers
in interfaceService
- Returns:
- true if remote connections are allowed
-
getType
public java.lang.String getType()
Description copied from interface:Service
Get the human readable short name of the service.
-
getName
public java.lang.String getName()
Description copied from interface:Service
Get the human readable name of the service.
-
getIfExists
boolean getIfExists()
-
formatType
public static java.lang.String formatType(int pgType)
Returns the name of the given type.- Parameters:
pgType
- the PostgreSQL type oid- Returns:
- the name of the given type
-
convertType
public static int convertType(TypeInfo type)
Convert the SQL type to a PostgreSQL type- Parameters:
type
- the SQL type- Returns:
- the PostgreSQL type
-
getTypeSet
java.util.HashSet<java.lang.Integer> getTypeSet()
Get the type hash set.- Returns:
- the type set
-
checkType
void checkType(int type)
Check whether a data type is supported. A warning is logged if not.- Parameters:
type
- the type
-
checkKeyAndGetDatabaseName
public java.lang.String checkKeyAndGetDatabaseName(java.lang.String db)
If no key is set, return the original database name. If a key is set, check if the key matches. If yes, return the correct database name. If not, throw an exception.- Parameters:
db
- the key to test (or database name if no key is used)- Returns:
- the database name
- Throws:
DbException
- if a key is set but doesn't match
-
-