[Dbix-class] DBIx::Class::Schema::Loader: table names in
generated classes
Alexander Hartmaier
alexander.hartmaier at t-systems.at
Mon Jan 24 11:08:35 GMT 2011
Always nice to see when suggestions are ignored...
Happy testing!
--
Best regards, Alex
On Mon, 2011-01-24 at 11:20 +0100, Jorge Gonzalez wrote:
> Thank you very much for your solution and Joerg Braun's (whic is
> basically the same).
>
> I've found exactly what I needed (and what I feel is the real solution
> to my problem): there's a switch to indicate
> DBIx::Class::Schema::Loader that you want to fully qualify the table
> names with the schema name: its name is "qualify_objects":
>
> http://search.cpan.org/~rkitover/DBIx-Class-Schema-Loader-0.07000/lib/DBIx/Class/Schema/Loader/Base.pm#qualify_objects
>
> I have regenerated the schema classes with options db_schema=OWNER and
> qualify_objects=1 in the Catalyst helper invocation, and now all
> generated class files have the schema prepended in their table names.
> This is my Catalyst helper invocation:
>
> script/myapp_create.pl model MyAppDB DBIC::Schema MyApp::Schema \
> create=static db_schema=OWNER qualify_objects=1
> 'dbi:Oracle:host=X.X.X.X;port=1521;sid=MYDB' \
> READER <password>
>
> And now all the classes have lines of the form:
>
> (...)
> __PACKAGE__->table("OWNER.my_table");
> (...)
>
> Which is exactly what I needed.
>
> Thanks to all that responded.
> Regards
> Jorge
>
>
>
> Jorge González Villalonga
> Director Técnico
>
> DAIKON Integración y Desarrollo
> S.L.
> Telf: (+34) 91 188 08 28
> Fax: (+34) 91 632 65 42
> www.daikon.es
>
> El 24/01/11 10:25, Alexander Hartmaier escribió:
> > This solution has the downside that you can't use the dbic schema with
> > different databases that don't support that syntax or with say a test
> > schema in the same database.
> >
> > What I do these days is immediately after connect:
> > $schema->storage->on_connect_do(["ALTER SESSION SET CURRENT_SCHEMA =
> > OWNER"] );
> >
> > --
> > Best regards, Alex
> >
> >
> > On Mon, 2011-01-24 at 03:28 +0100, Jose Fonseca wrote:
> >
> > > Hello Jorge,
> > > to test if this is really your issue, choose one of the generated
> > > classes and change the
> > >
> > > __PACKAGE__->table("table");
> > >
> > > to
> > >
> > > __PACKAGE__->table("SCHEMA.table");
> > >
> > > If it solves your problem for that particular class, then you'll be
> > > sure about the cause and you can fix the others accordingly.
> > >
> > > I'm not 100% sure about the Oracle syntax, but you can probably set
> > > the default schema on the DBI connection string passed to
> > > Your_Base_DBIx_Class->connect(); ( See
> > > http://search.cpan.org/~abraxxa/DBIx-Class-0.08127/lib/DBIx/Class/Storage/DBI.pm#connect_info )
> > >
> > > Regards,
> > > Jose
> > >
> > > On Sun, Jan 23, 2011 at 5:49 PM, Jorge Gonzalez
> > > <jorge.gonzalez at daikon.es> wrote:
> > > Hi,
> > >
> > > first, let me apologize in advance if this issue has been
> > > brought up on the list before. I haven't been able to find a
> > > solution to my problem (googled for it for a couple of hours),
> > > though I think it's a pretty easy one and probably someone has
> > > stepped into it.
> > >
> > > This is the story:
> > >
> > > I have a running Oracle schema, for which I have a readonly
> > > user. The tables are owned by user OWNER, but I have user
> > > READER to access them. READER has a readonly access to the
> > > tables.
> > >
> > > I have generated the schema classes though
> > > DBIx::Class::Schema::Loader (via the Catalyst helper script).
> > > I needed the special option "db_schema=OWNER" to correctly
> > > generate the classes, since READER owns no tables, but has
> > > access to them. The generated classes have correct
> > > "...->table('my_table_name')" sentences.
> > >
> > > But whenever I try to use the schema classes, they don't work
> > > and give exceptions about 'table my_table_name does not exist
> > > in current schema'. I believe this is due to the table name
> > > being specified as 'my_table_name', and not
> > > 'OWNER.my_table_name' in the '...->table(' function call,
> > > since I have manually modified the class to be like the
> > > latter, and it works this way.
> > >
> > > I'd like to know where can I put the equivalent
> > > "db_schema=OWNER" or equivalent option, so that all the schema
> > > classes use the tables from the OWNER schema, despite
> > > connecting to the database with the READER user.
> > >
> > > Thanks in advance
> > > Best regards
> > > Jorge
> > >
> > > --
> > >
> > >
> > > Jorge González Villalonga
> > > Director Técnico
> > >
> > > DAIKON Integración y Desarrollo
> > > S.L.
> > > Telf: (+34) 91 188 08 28
> > > Fax: (+34) 91 632 65 42
> > > www.daikon.es
> > >
> > > _______________________________________________
> > > List:
> > > http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
> > > IRC: irc.perl.org#dbix-class
> > > SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
> > > Searchable Archive:
> > > http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk
> > >
> > >
> >
> > *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
> > T-Systems Austria GesmbH Rennweg 97-99, 1030 Wien
> > Handelsgericht Wien, FN 79340b
> > *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
> > Notice: This e-mail contains information that is confidential and may be privileged.
> > If you are not the intended recipient, please notify the sender and then
> > delete this e-mail immediately.
> > *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
> >
> > _______________________________________________
> > List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
> > IRC: irc.perl.org#dbix-class
> > SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
> > Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk
> >
More information about the DBIx-Class
mailing list