Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
fa67a247
Commit
fa67a247
authored
Sep 20, 1997
by
Marc G. Fournier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bring in Peter's changes...finally :(
parent
e9cd0f2e
Changes
10
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
1324 additions
and
247 deletions
+1324
-247
src/interfaces/jdbc/postgresql/Connection.java
src/interfaces/jdbc/postgresql/Connection.java
+9
-247
src/interfaces/jdbc/postgresql/PG_Stream.java
src/interfaces/jdbc/postgresql/PG_Stream.java
+309
-0
src/interfaces/jdbc/postgresql/PGbox.java
src/interfaces/jdbc/postgresql/PGbox.java
+59
-0
src/interfaces/jdbc/postgresql/PGcircle.java
src/interfaces/jdbc/postgresql/PGcircle.java
+72
-0
src/interfaces/jdbc/postgresql/PGlobj.java
src/interfaces/jdbc/postgresql/PGlobj.java
+462
-0
src/interfaces/jdbc/postgresql/PGlseg.java
src/interfaces/jdbc/postgresql/PGlseg.java
+58
-0
src/interfaces/jdbc/postgresql/PGpath.java
src/interfaces/jdbc/postgresql/PGpath.java
+99
-0
src/interfaces/jdbc/postgresql/PGpoint.java
src/interfaces/jdbc/postgresql/PGpoint.java
+96
-0
src/interfaces/jdbc/postgresql/PGpolygon.java
src/interfaces/jdbc/postgresql/PGpolygon.java
+60
-0
src/interfaces/jdbc/postgresql/PGtokenizer.java
src/interfaces/jdbc/postgresql/PGtokenizer.java
+100
-0
No files found.
src/interfaces/jdbc/postgresql/Connection.java
View file @
fa67a247
...
...
@@ -28,7 +28,7 @@ import postgresql.*;
*/
public
class
Connection
implements
java
.
sql
.
Connection
{
pr
ivate
PG_Stream
pg_stream
;
pr
otected
PG_Stream
pg_stream
;
private
String
PG_HOST
;
private
int
PG_PORT
;
...
...
@@ -591,256 +591,18 @@ public class Connection implements java.sql.Connection
{
return
PG_USER
;
}
}
// ***********************************************************************
// This class handles all the Streamed I/O for a postgresql connection
class
PG_Stream
{
private
Socket
connection
;
private
InputStream
pg_input
;
private
OutputStream
pg_output
;
/**
* Constructor: Connect to the PostgreSQL back end and return
* a stream connection.
*
* @param host the hostname to connect to
* @param port the port number that the postmaster is sitting on
* @exception IOException if an IOException occurs below it.
*/
public
PG_Stream
(
String
host
,
int
port
)
throws
IOException
{
connection
=
new
Socket
(
host
,
port
);
pg_input
=
connection
.
getInputStream
();
pg_output
=
connection
.
getOutputStream
();
}
/**
* Sends a single character to the back end
*
* @param val the character to be sent
* @exception IOException if an I/O error occurs
*/
public
void
SendChar
(
int
val
)
throws
IOException
{
pg_output
.
write
(
val
);
}
/**
* Sends an integer to the back end
*
* @param val the integer to be sent
* @param siz the length of the integer in bytes (size of structure)
* @exception IOException if an I/O error occurs
*/
public
void
SendInteger
(
int
val
,
int
siz
)
throws
IOException
{
byte
[]
buf
=
new
byte
[
siz
];
while
(
siz
--
>
0
)
{
buf
[
siz
]
=
(
byte
)(
val
&
0xff
);
val
>>=
8
;
}
Send
(
buf
);
}
/**
* Send an array of bytes to the backend
*
* @param buf The array of bytes to be sent
* @exception IOException if an I/O error occurs
*/
public
void
Send
(
byte
buf
[])
throws
IOException
{
pg_output
.
write
(
buf
);
}
/**
* Send an exact array of bytes to the backend - if the length
* has not been reached, send nulls until it has.
*
* @param buf the array of bytes to be sent
* @param siz the number of bytes to be sent
* @exception IOException if an I/O error occurs
*/
public
void
Send
(
byte
buf
[],
int
siz
)
throws
IOException
{
int
i
;
pg_output
.
write
(
buf
,
0
,
(
buf
.
length
<
siz
?
buf
.
length
:
siz
));
if
(
buf
.
length
<
siz
)
{
for
(
i
=
buf
.
length
;
i
<
siz
;
++
i
)
{
pg_output
.
write
(
0
);
}
}
}
/**
* Receives a single character from the backend
*
* @return the character received
* @exception SQLException if an I/O Error returns
*/
public
int
ReceiveChar
()
throws
SQLException
{
int
c
=
0
;
try
{
c
=
pg_input
.
read
();
if
(
c
<
0
)
throw
new
IOException
(
"EOF"
);
}
catch
(
IOException
e
)
{
throw
new
SQLException
(
"Error reading from backend: "
+
e
.
toString
());
}
return
c
;
}
/**
* Receives an integer from the backend
*
* @param siz length of the integer in bytes
* @return the integer received from the backend
* @exception SQLException if an I/O error occurs
*/
public
int
ReceiveInteger
(
int
siz
)
throws
SQLException
{
int
n
=
0
;
try
{
for
(
int
i
=
0
;
i
<
siz
;
i
++)
{
int
b
=
pg_input
.
read
();
if
(
b
<
0
)
throw
new
IOException
(
"EOF"
);
n
=
n
|
(
b
>>
(
8
*
i
))
;
}
}
catch
(
IOException
e
)
{
throw
new
SQLException
(
"Error reading from backend: "
+
e
.
toString
());
}
return
n
;
}
/**
* Receives a null-terminated string from the backend. Maximum of
* maxsiz bytes - if we don't see a null, then we assume something
* has gone wrong.
* This method is not part of the Connection interface. Its is an extension
* that allows access to the PostgreSQL Large Object API
*
* @param maxsiz maximum length of string
* @return string from back end
* @exception SQLException if an I/O error occurs
*/
public
String
ReceiveString
(
int
maxsiz
)
throws
SQLException
{
byte
[]
rst
=
new
byte
[
maxsiz
];
int
s
=
0
;
try
{
while
(
s
<
maxsiz
)
{
int
c
=
pg_input
.
read
();
if
(
c
<
0
)
throw
new
IOException
(
"EOF"
);
else
if
(
c
==
0
)
break
;
else
rst
[
s
++]
=
(
byte
)
c
;
}
if
(
s
>=
maxsiz
)
throw
new
IOException
(
"Too Much Data"
);
}
catch
(
IOException
e
)
{
throw
new
SQLException
(
"Error reading from backend: "
+
e
.
toString
());
}
String
v
=
new
String
(
rst
,
0
,
s
);
return
v
;
}
/**
* Read a tuple from the back end. A tuple is a two dimensional
* array of bytes
*
* @param nf the number of fields expected
* @param bin true if the tuple is a binary tuple
* @return null if the current response has no more tuples, otherwise
* an array of strings
* @exception SQLException if a data I/O error occurs
* @return PGlobj class that implements the API
*/
public
byte
[][]
ReceiveTuple
(
int
nf
,
boolean
bin
)
throws
SQLException
{
int
i
,
bim
=
(
nf
+
7
)/
8
;
byte
[]
bitmask
=
Receive
(
bim
);
byte
[][]
answer
=
new
byte
[
nf
][
0
];
int
whichbit
=
0x80
;
int
whichbyte
=
0
;
for
(
i
=
0
;
i
<
nf
;
++
i
)
public
PGlobj
getLargeObjectAPI
()
throws
SQLException
{
boolean
isNull
=
((
bitmask
[
whichbyte
]
&
whichbit
)
==
0
);
whichbit
>>=
1
;
if
(
whichbit
==
0
)
{
++
whichbyte
;
whichbit
=
0x80
;
}
if
(
isNull
)
answer
[
i
]
=
null
;
else
{
int
len
=
ReceiveInteger
(
4
);
if
(!
bin
)
len
-=
4
;
if
(
len
<
0
)
len
=
0
;
answer
[
i
]
=
Receive
(
len
);
}
return
new
PGlobj
(
this
);
}
return
answer
;
}
/**
* Reads in a given number of bytes from the backend
*
* @param siz number of bytes to read
* @return array of bytes received
* @exception SQLException if a data I/O error occurs
*/
private
byte
[]
Receive
(
int
siz
)
throws
SQLException
{
byte
[]
answer
=
new
byte
[
siz
];
int
s
=
0
;
}
try
{
while
(
s
<
siz
)
{
int
w
=
pg_input
.
read
(
answer
,
s
,
siz
-
s
);
if
(
w
<
0
)
throw
new
IOException
(
"EOF"
);
s
+=
w
;
}
}
catch
(
IOException
e
)
{
throw
new
SQLException
(
"Error reading from backend: "
+
e
.
toString
());
}
return
answer
;
}
// ***********************************************************************
/**
* Closes the connection
*
* @exception IOException if a IO Error occurs
*/
public
void
close
()
throws
IOException
{
pg_output
.
close
();
pg_input
.
close
();
connection
.
close
();
}
}
src/interfaces/jdbc/postgresql/PG_Stream.java
0 → 100644
View file @
fa67a247
package
postgresql
;
import
java.io.*
;
import
java.lang.*
;
import
java.net.*
;
import
java.util.*
;
import
java.sql.*
;
import
postgresql.*
;
/**
* @version 1.0 15-APR-1997
*
* This class is used by Connection & PGlobj for communicating with the
* backend.
*
* @see java.sql.Connection
*/
// This class handles all the Streamed I/O for a postgresql connection
public
class
PG_Stream
{
private
Socket
connection
;
private
InputStream
pg_input
;
private
OutputStream
pg_output
;
/**
* Constructor: Connect to the PostgreSQL back end and return
* a stream connection.
*
* @param host the hostname to connect to
* @param port the port number that the postmaster is sitting on
* @exception IOException if an IOException occurs below it.
*/
public
PG_Stream
(
String
host
,
int
port
)
throws
IOException
{
connection
=
new
Socket
(
host
,
port
);
pg_input
=
connection
.
getInputStream
();
pg_output
=
connection
.
getOutputStream
();
}
/**
* Sends a single character to the back end
*
* @param val the character to be sent
* @exception IOException if an I/O error occurs
*/
public
void
SendChar
(
int
val
)
throws
IOException
{
//pg_output.write(val);
byte
b
[]
=
new
byte
[
1
];
b
[
0
]
=
(
byte
)
val
;
pg_output
.
write
(
b
);
}
/**
* Sends an integer to the back end
*
* @param val the integer to be sent
* @param siz the length of the integer in bytes (size of structure)
* @exception IOException if an I/O error occurs
*/
public
void
SendInteger
(
int
val
,
int
siz
)
throws
IOException
{
byte
[]
buf
=
new
byte
[
siz
];
while
(
siz
--
>
0
)
{
buf
[
siz
]
=
(
byte
)(
val
&
0xff
);
val
>>=
8
;
}
Send
(
buf
);
}
/**
* Send an array of bytes to the backend
*
* @param buf The array of bytes to be sent
* @exception IOException if an I/O error occurs
*/
public
void
Send
(
byte
buf
[])
throws
IOException
{
pg_output
.
write
(
buf
);
}
/**
* Send an exact array of bytes to the backend - if the length
* has not been reached, send nulls until it has.
*
* @param buf the array of bytes to be sent
* @param siz the number of bytes to be sent
* @exception IOException if an I/O error occurs
*/
public
void
Send
(
byte
buf
[],
int
siz
)
throws
IOException
{
Send
(
buf
,
0
,
siz
);
}
/**
* Send an exact array of bytes to the backend - if the length
* has not been reached, send nulls until it has.
*
* @param buf the array of bytes to be sent
* @param off offset in the array to start sending from
* @param siz the number of bytes to be sent
* @exception IOException if an I/O error occurs
*/
public
void
Send
(
byte
buf
[],
int
off
,
int
siz
)
throws
IOException
{
int
i
;
pg_output
.
write
(
buf
,
off
,
((
buf
.
length
-
off
)
<
siz
?
(
buf
.
length
-
off
)
:
siz
));
if
((
buf
.
length
-
off
)
<
siz
)
{
for
(
i
=
buf
.
length
-
off
;
i
<
siz
;
++
i
)
{
pg_output
.
write
(
0
);
}
}
}
/**
* Receives a single character from the backend
*
* @return the character received
* @exception SQLException if an I/O Error returns
*/
public
int
ReceiveChar
()
throws
SQLException
{
int
c
=
0
;
try
{
c
=
pg_input
.
read
();
if
(
c
<
0
)
throw
new
IOException
(
"EOF"
);
}
catch
(
IOException
e
)
{
throw
new
SQLException
(
"Error reading from backend: "
+
e
.
toString
());
}
return
c
;
}
/**
* Receives an integer from the backend
*
* @param siz length of the integer in bytes
* @return the integer received from the backend
* @exception SQLException if an I/O error occurs
*/
public
int
ReceiveInteger
(
int
siz
)
throws
SQLException
{
int
n
=
0
;
try
{
for
(
int
i
=
0
;
i
<
siz
;
i
++)
{
int
b
=
pg_input
.
read
();
if
(
b
<
0
)
throw
new
IOException
(
"EOF"
);
n
=
n
|
(
b
>>
(
8
*
i
))
;
}
}
catch
(
IOException
e
)
{
throw
new
SQLException
(
"Error reading from backend: "
+
e
.
toString
());
}
return
n
;
}
/**
* Receives a null-terminated string from the backend. Maximum of
* maxsiz bytes - if we don't see a null, then we assume something
* has gone wrong.
*
* @param maxsiz maximum length of string
* @return string from back end
* @exception SQLException if an I/O error occurs
*/
public
String
ReceiveString
(
int
maxsiz
)
throws
SQLException
{
byte
[]
rst
=
new
byte
[
maxsiz
];
int
s
=
0
;
try
{
while
(
s
<
maxsiz
)
{
int
c
=
pg_input
.
read
();
if
(
c
<
0
)
throw
new
IOException
(
"EOF"
);
else
if
(
c
==
0
)
break
;
else
rst
[
s
++]
=
(
byte
)
c
;
}
if
(
s
>=
maxsiz
)
throw
new
IOException
(
"Too Much Data"
);
}
catch
(
IOException
e
)
{
throw
new
SQLException
(
"Error reading from backend: "
+
e
.
toString
());
}
String
v
=
new
String
(
rst
,
0
,
s
);
return
v
;
}
/**
* Read a tuple from the back end. A tuple is a two dimensional
* array of bytes
*
* @param nf the number of fields expected
* @param bin true if the tuple is a binary tuple
* @return null if the current response has no more tuples, otherwise
* an array of strings
* @exception SQLException if a data I/O error occurs
*/
public
byte
[][]
ReceiveTuple
(
int
nf
,
boolean
bin
)
throws
SQLException
{
int
i
,
bim
=
(
nf
+
7
)/
8
;
byte
[]
bitmask
=
Receive
(
bim
);
byte
[][]
answer
=
new
byte
[
nf
][
0
];
int
whichbit
=
0x80
;
int
whichbyte
=
0
;
for
(
i
=
0
;
i
<
nf
;
++
i
)
{
boolean
isNull
=
((
bitmask
[
whichbyte
]
&
whichbit
)
==
0
);
whichbit
>>=
1
;
if
(
whichbit
==
0
)
{
++
whichbyte
;
whichbit
=
0x80
;
}
if
(
isNull
)
answer
[
i
]
=
null
;
else
{
int
len
=
ReceiveInteger
(
4
);
if
(!
bin
)
len
-=
4
;
if
(
len
<
0
)
len
=
0
;
answer
[
i
]
=
Receive
(
len
);
}
}
return
answer
;
}
/**
* Reads in a given number of bytes from the backend
*
* @param siz number of bytes to read
* @return array of bytes received
* @exception SQLException if a data I/O error occurs
*/
private
byte
[]
Receive
(
int
siz
)
throws
SQLException
{
byte
[]
answer
=
new
byte
[
siz
];
int
s
=
0
;
try
{
while
(
s
<
siz
)
{
int
w
=
pg_input
.
read
(
answer
,
s
,
siz
-
s
);
if
(
w
<
0
)
throw
new
IOException
(
"EOF"
);
s
+=
w
;
}
}
catch
(
IOException
e
)
{
throw
new
SQLException
(
"Error reading from backend: "
+
e
.
toString
());
}
return
answer
;
}
/**
* Reads in a given number of bytes from the backend
*
* @param buf buffer to store result
* @param off offset in buffer
* @param siz number of bytes to read
* @exception SQLException if a data I/O error occurs
*/
public
void
Receive
(
byte
[]
b
,
int
off
,
int
siz
)
throws
SQLException
{
int
s
=
0
;
try
{
while
(
s
<
siz
)
{
int
w
=
pg_input
.
read
(
b
,
off
+
s
,
siz
-
s
);
if
(
w
<
0
)
throw
new
IOException
(
"EOF"
);
s
+=
w
;
}
}
catch
(
IOException
e
)
{
throw
new
SQLException
(
"Error reading from backend: "
+
e
.
toString
());
}
}
/**
* Closes the connection
*
* @exception IOException if a IO Error occurs
*/
public
void
close
()
throws
IOException
{
pg_output
.
close
();
pg_input
.
close
();
connection
.
close
();
}
}
src/interfaces/jdbc/postgresql/PGbox.java
0 → 100644
View file @
fa67a247
/**
* @version 6.2
*
* This implements a box consisting of two points
*
*/
package
postgresql
;
import
java.io.*
;
import
java.sql.*
;
public
class
PGbox
implements
Serializable
{
/**
* These are the two points.
*/
public
PGpoint
point
[]
=
new
PGpoint
[
2
];
public
PGbox
(
double
x1
,
double
y1
,
double
x2
,
double
y2
)
{
this
.
point
[
0
]
=
new
PGpoint
(
x1
,
y1
);
this
.
point
[
1
]
=
new
PGpoint
(
x2
,
y2
);
}
public
PGbox
(
PGpoint
p1
,
PGpoint
p2
)
{
this
.
point
[
0
]
=
p1
;
this
.
point
[
1
]
=
p2
;
}
/**
* This constructor is used by the driver.
*/
public
PGbox
(
String
s
)
throws
SQLException
{
PGtokenizer
t
=
new
PGtokenizer
(
s
,
','
);
if
(
t
.
getSize
()
!=
2
)
throw
new
SQLException
(
"conversion of box failed - "
+
s
);
point
[
0
]
=
new
PGpoint
(
t
.
getToken
(
0
));
point
[
1
]
=
new
PGpoint
(
t
.
getToken
(
1
));
}
public
boolean
equals
(
Object
obj
)
{
PGbox
p
=
(
PGbox
)
obj
;
return
(
p
.
point
[
0
].
equals
(
point
[
0
])
&&
p
.
point
[
1
].
equals
(
point
[
1
]))
||
(
p
.
point
[
0
].
equals
(
point
[
1
])
&&
p
.
point
[
1
].
equals
(
point
[
0
]));
}
/**
* This returns the lseg in the syntax expected by postgresql
*/
public
String
toString
()
{
return
point
[
0
].
toString
()+
","
+
point
[
1
].
toString
();
}
}
src/interfaces/jdbc/postgresql/PGcircle.java
0 → 100644
View file @
fa67a247
/**
*
* This implements a circle consisting of a point and a radius
*
*/
package
postgresql
;
import
java.io.*
;
import
java.sql.*
;
public
class
PGcircle
implements
Serializable
{
/**
* This is the centre point
*/
public
PGpoint
center
;
/**
* This is the radius
*/
double
radius
;
public
PGcircle
(
double
x
,
double
y
,
double
r
)
{
this
.
center
=
new
PGpoint
(
x
,
y
);
this
.
radius
=
r
;
}
public
PGcircle
(
PGpoint
c
,
double
r
)
{
this
.
center
=
c
;
this
.
radius
=
r
;
}
public
PGcircle
(
PGcircle
c
)
{
this
.
center
=
new
PGpoint
(
c
.
center
);
this
.
radius
=
c
.
radius
;
}
/**
* This constructor is used by the driver.
*/
public
PGcircle
(
String
s
)
throws
SQLException
{
PGtokenizer
t
=
new
PGtokenizer
(
PGtokenizer
.
removeAngle
(
s
),
','
);
if
(
t
.
getSize
()
!=
2
)
throw
new
SQLException
(
"conversion of circle failed - "
+
s
);
try
{
center
=
new
PGpoint
(
t
.
getToken
(
0
));
radius
=
Double
.
valueOf
(
t
.
getToken
(
1
)).
doubleValue
();
}
catch
(
NumberFormatException
e
)
{
throw
new
SQLException
(
"conversion of circle failed - "
+
s
+
" - +"
+
e
.
toString
());
}
}
public
boolean
equals
(
Object
obj
)
{
PGcircle
p
=
(
PGcircle
)
obj
;
return
p
.
center
.
equals
(
center
)
&&
p
.
radius
==
radius
;
}
/**
* This returns the circle in the syntax expected by postgresql
*/
public
String
toString
()
{
return
"<"
+
center
+
","
+
radius
+
">"
;
}
}
src/interfaces/jdbc/postgresql/PGlobj.java
0 → 100644
View file @
fa67a247
This diff is collapsed.
Click to expand it.
src/interfaces/jdbc/postgresql/PGlseg.java
0 → 100644
View file @
fa67a247
/**
*
* This implements a lseg (line segment) consisting of two points
*
*/
package
postgresql
;
import
java.io.*
;
import
java.sql.*
;
public
class
PGlseg
implements
Serializable
{
/**
* These are the two points.
*/
public
PGpoint
point
[]
=
new
PGpoint
[
2
];
public
PGlseg
(
double
x1
,
double
y1
,
double
x2
,
double
y2
)
{
this
.
point
[
0
]
=
new
PGpoint
(
x1
,
y1
);
this
.
point
[
1
]
=
new
PGpoint
(
x2
,
y2
);
}
public
PGlseg
(
PGpoint
p1
,
PGpoint
p2
)
{
this
.
point
[
0
]
=
p1
;
this
.
point
[
1
]
=
p2
;
}
/**
* This constructor is used by the driver.
*/
public
PGlseg
(
String
s
)
throws
SQLException
{
PGtokenizer
t
=
new
PGtokenizer
(
PGtokenizer
.
removeBox
(
s
),
','
);
if
(
t
.
getSize
()
!=
2
)
throw
new
SQLException
(
"conversion of lseg failed - "
+
s
);
point
[
0
]
=
new
PGpoint
(
t
.
getToken
(
0
));
point
[
1
]
=
new
PGpoint
(
t
.
getToken
(
1
));
}
public
boolean
equals
(
Object
obj
)
{
PGlseg
p
=
(
PGlseg
)
obj
;
return
(
p
.
point
[
0
].
equals
(
point
[
0
])
&&
p
.
point
[
1
].
equals
(
point
[
1
]))
||
(
p
.
point
[
0
].
equals
(
point
[
1
])
&&
p
.
point
[
1
].
equals
(
point
[
0
]));
}
/**
* This returns the lseg in the syntax expected by postgresql
*/
public
String
toString
()
{
return
"["
+
point
[
0
]+
","
+
point
[
1
]+
"]"
;
}
}
src/interfaces/jdbc/postgresql/PGpath.java
0 → 100644
View file @
fa67a247
/**
*
* This implements a path (a multiple segmented line, which may be closed)
*
*/
package
postgresql
;
import
java.io.*
;
import
java.sql.*
;
public
class
PGpath
implements
Serializable
{
public
int
npoints
;
public
boolean
open
;
public
PGpoint
point
[];
public
PGpath
(
int
num
,
PGpoint
[]
points
,
boolean
open
)
{
npoints
=
num
;
this
.
point
=
points
;
this
.
open
=
open
;
}
/**
* This constructor is used by the driver.
*/
public
PGpath
(
String
s
)
throws
SQLException
{
// First test to see if were open
if
(
s
.
startsWith
(
"["
)
&&
s
.
endsWith
(
"]"
))
{
open
=
true
;
s
=
PGtokenizer
.
removeBox
(
s
);
}
else
if
(
s
.
startsWith
(
"("
)
&&
s
.
endsWith
(
")"
))
{
open
=
false
;
s
=
PGtokenizer
.
removePara
(
s
);
}
else
throw
new
SQLException
(
"cannot tell if path is open or closed"
);
PGtokenizer
t
=
new
PGtokenizer
(
s
,
','
);
npoints
=
t
.
getSize
();
point
=
new
PGpoint
[
npoints
];
for
(
int
p
=
0
;
p
<
npoints
;
p
++)
point
[
p
]
=
new
PGpoint
(
t
.
getToken
(
p
));
}
public
boolean
equals
(
Object
obj
)
{
PGpath
p
=
(
PGpath
)
obj
;
if
(
p
.
npoints
!=
npoints
)
return
false
;
if
(
p
.
open
!=
open
)
return
false
;
for
(
int
i
=
0
;
i
<
npoints
;
i
++)
if
(!
point
[
i
].
equals
(
p
.
point
[
i
]))
return
false
;
return
true
;
}
/**
* This returns the polygon in the syntax expected by postgresql
*/
public
String
toString
()
{
StringBuffer
b
=
new
StringBuffer
(
open
?
"["
:
"("
);
for
(
int
p
=
0
;
p
<
npoints
;
p
++)
b
.
append
(
point
[
p
].
toString
());
b
.
append
(
open
?
"]"
:
")"
);
return
b
.
toString
();
}
public
boolean
isOpen
()
{
return
open
;
}
public
boolean
isClosed
()
{
return
!
open
;
}
public
void
closePath
()
{
open
=
false
;
}
public
void
openPath
()
{
open
=
true
;
}
}
src/interfaces/jdbc/postgresql/PGpoint.java
0 → 100644
View file @
fa67a247
/**
*
* This implements a version of java.awt.Point, except it uses double
* to represent the coordinates.
*
* It maps to the point datatype in postgresql.
*/
package
postgresql
;
import
java.awt.Point
;
import
java.io.*
;
import
java.sql.*
;
public
class
PGpoint
implements
Serializable
{
/**
* These are the coordinates.
* These are public, because their equivalents in java.awt.Point are
*/
public
double
x
,
y
;
public
PGpoint
(
double
x
,
double
y
)
{
this
.
x
=
x
;
this
.
y
=
y
;
}
public
PGpoint
(
PGpoint
p
)
{
this
(
p
.
x
,
p
.
y
);
}
/**
* This constructor is used by the driver.
*/
public
PGpoint
(
String
s
)
throws
SQLException
{
PGtokenizer
t
=
new
PGtokenizer
(
PGtokenizer
.
removePara
(
s
),
','
);
try
{
x
=
Double
.
valueOf
(
t
.
getToken
(
0
)).
doubleValue
();
y
=
Double
.
valueOf
(
t
.
getToken
(
1
)).
doubleValue
();
}
catch
(
NumberFormatException
e
)
{
throw
new
SQLException
(
"conversion of point failed - "
+
e
.
toString
());
}
}
public
boolean
equals
(
Object
obj
)
{
PGpoint
p
=
(
PGpoint
)
obj
;
return
x
==
p
.
x
&&
y
==
p
.
y
;
}
/**
* This returns the point in the syntax expected by postgresql
*/
public
String
toString
()
{
return
"("
+
x
+
","
+
y
+
")"
;
}
public
void
translate
(
int
x
,
int
y
)
{
translate
((
double
)
x
,(
double
)
y
);
}
public
void
translate
(
double
x
,
double
y
)
{
this
.
x
+=
x
;
this
.
y
+=
y
;
}
public
void
move
(
int
x
,
int
y
)
{
setLocation
(
x
,
y
);
}
public
void
move
(
double
x
,
double
y
)
{
this
.
x
=
x
;
this
.
y
=
y
;
}
// refer to java.awt.Point for description of this
public
void
setLocation
(
int
x
,
int
y
)
{
move
((
double
)
x
,(
double
)
y
);
}
// refer to java.awt.Point for description of this
public
void
setLocation
(
Point
p
)
{
setLocation
(
p
.
x
,
p
.
y
);
}
}
src/interfaces/jdbc/postgresql/PGpolygon.java
0 → 100644
View file @
fa67a247
/**
*
* This implements a polygon (based on java.awt.Polygon)
*
*/
package
postgresql
;
import
java.io.*
;
import
java.sql.*
;
public
class
PGpolygon
implements
Serializable
{
public
int
npoints
;
public
PGpoint
point
[];
public
PGpolygon
(
int
num
,
PGpoint
[]
points
)
{
npoints
=
num
;
this
.
point
=
points
;
}
/**
* This constructor is used by the driver.
*/
public
PGpolygon
(
String
s
)
throws
SQLException
{
PGtokenizer
t
=
new
PGtokenizer
(
PGtokenizer
.
removePara
(
s
),
','
);
npoints
=
t
.
getSize
();
point
=
new
PGpoint
[
npoints
];
for
(
int
p
=
0
;
p
<
npoints
;
p
++)
point
[
p
]
=
new
PGpoint
(
t
.
getToken
(
p
));
}
public
boolean
equals
(
Object
obj
)
{
PGpolygon
p
=
(
PGpolygon
)
obj
;
if
(
p
.
npoints
!=
npoints
)
return
false
;
for
(
int
i
=
0
;
i
<
npoints
;
i
++)
if
(!
point
[
i
].
equals
(
p
.
point
[
i
]))
return
false
;
return
true
;
}
/**
* This returns the polygon in the syntax expected by postgresql
*/
public
String
toString
()
{
StringBuffer
b
=
new
StringBuffer
();
for
(
int
p
=
0
;
p
<
npoints
;
p
++)
b
.
append
(
point
[
p
].
toString
());
return
b
.
toString
();
}
}
src/interfaces/jdbc/postgresql/PGtokenizer.java
0 → 100644
View file @
fa67a247
/**
*
* This class is used to tokenize the text output of postgres.
*
*/
package
postgresql
;
import
java.sql.*
;
import
java.util.*
;
public
class
PGtokenizer
{
protected
Vector
tokens
;
public
PGtokenizer
(
String
string
,
char
delim
)
{
tokenize
(
string
,
delim
);
}
/**
* Tokenizes a new string
*/
public
int
tokenize
(
String
string
,
char
delim
)
{
tokens
=
new
Vector
();
int
nest
=
0
,
p
,
s
;
for
(
p
=
0
,
s
=
0
;
p
<
string
.
length
();
p
++)
{
char
c
=
string
.
charAt
(
p
);
// increase nesting if an open character is found
if
(
c
==
'('
||
c
==
'['
)
nest
++;
// decrease nesting if a close character is found
if
(
c
==
')'
||
c
==
']'
)
nest
--;
if
(
nest
==
0
&&
c
==
delim
)
{
tokens
.
addElement
(
string
.
substring
(
s
,
p
));
s
=
p
+
1
;
// +1 to skip the delimiter
}
}
// Don't forget the last token ;-)
if
(
s
<
string
.
length
())
tokens
.
addElement
(
string
.
substring
(
s
));
return
tokens
.
size
();
}
public
int
getSize
()
{
return
tokens
.
size
();
}
public
String
getToken
(
int
n
)
{
return
(
String
)
tokens
.
elementAt
(
n
);
}
/**
* This returns a new tokenizer based on one of our tokens
*/
public
PGtokenizer
tokenizeToken
(
int
n
,
char
delim
)
{
return
new
PGtokenizer
(
getToken
(
n
),
delim
);
}
/**
* This removes the lead/trailing strings from a string
*/
public
static
String
remove
(
String
s
,
String
l
,
String
t
)
{
if
(
s
.
startsWith
(
l
))
s
=
s
.
substring
(
l
.
length
());
if
(
s
.
endsWith
(
t
))
s
=
s
.
substring
(
0
,
s
.
length
()-
t
.
length
());
return
s
;
}
/**
* This removes the lead/trailing strings from all tokens
*/
public
void
remove
(
String
l
,
String
t
)
{
for
(
int
i
=
0
;
i
<
tokens
.
size
();
i
++)
{
tokens
.
setElementAt
(
remove
((
String
)
tokens
.
elementAt
(
i
),
l
,
t
),
i
);
}
}
public
static
String
removePara
(
String
s
)
{
return
remove
(
s
,
"("
,
")"
);}
public
void
removePara
()
{
remove
(
"("
,
")"
);}
public
static
String
removeBox
(
String
s
)
{
return
remove
(
s
,
"["
,
"]"
);}
public
void
removeBox
()
{
remove
(
"["
,
"]"
);}
public
static
String
removeAngle
(
String
s
)
{
return
remove
(
s
,
"<"
,
">"
);}
public
void
removeAngle
()
{
remove
(
"<"
,
">"
);}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment