[ 
https://issues.apache.org/jira/browse/DERBY-4171?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12701166#action_12701166
 ] 

Rick Hillegas commented on DERBY-4171:
--------------------------------------

Thanks for thinking about this issue, Knut and Kristian. What do you think the 
behavior should be:

1) The memory subprotocol defines a separate namespace of databases. In this 
situation, it should be possible to have two databases with the same name, one 
in the memory namespace and one in the namespace accessed by all other 
subprotocols

or

2) The first thread to open a database defines which subprotocols must be used 
to access the database from other connections--until the database is brought 
down. If a database was first opened by the memory subprotocol, then a database 
by that name cannot be accessed simultaneously by any other subprotocol. 
Conversely, if a database was first opened by the default or classpath 
subprotocols, then a database by that name cannot be accessed simultaneously by 
the memory subprotocol.

I have two worries:

A) We may not understand the current behavior of our subprotocols well enough. 
See DERBY-4172.

B) The code may assume that there is only one namespace for databases. Adding 
another namespace may be tricky.

I think I would lean toward (2). If we later decide that (2) is too restrictive 
and we think we understand the code well enough, then we could migrate to (1) 
without causing serious compatibility issues. I think that going from (1) to 
(2) will have serious compatibility implications.

> Connections to on-disk db go to in-memory db if in-memory db with same name 
> is booted
> -------------------------------------------------------------------------------------
>
>                 Key: DERBY-4171
>                 URL: https://issues.apache.org/jira/browse/DERBY-4171
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.5.1.1
>            Reporter: Knut Anders Hatlen
>         Attachments: derby-4171-1a-fix.diff
>
>
> When an in-memory database has been booted, subsequent attempts to connect to 
> an ordinary (on-disk) database with the same name as the in-memory database 
> will connect to the in-memory db.
> ij version 10.5
> ij> connect 'jdbc:derby:memory:MyDB;create=true'; -- with subprotocol memory
> ij> create table t (x varchar(30));
> 0 rows inserted/updated/deleted
> ij> insert into t values 'This is the in-memory backend';
> 1 row inserted/updated/deleted
> ij> connect 'jdbc:derby:MyDB;create=true'; --without subprotocol memory, 
> should create disk db
> WARNING 01J01: Database 'MyDB' not created, connection made to existing 
> database instead.
> ij(CONNECTION1)> select * from t;
> X                             
> ------------------------------
> This is the in-memory backend 
> 1 row selected

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to