The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package SQL::Dialects::Role;

#########################################################################
#
# This module is copyright (c), 2009 by Michael G. Schwern
# This module is copyright (c), 2009-2017 by Jens Rehsack.
# All rights reserved.
#
# It may be freely distributed under the same terms as Perl itself.
#
# See below for help (search for SYNOPSIS)
#########################################################################

use strict;
use warnings FATAL => "all";

use base qw(Exporter);
our @EXPORT  = qw(get_config_as_hash);
our $VERSION = '1.412';

sub get_config_as_hash
{
    my $class = $_[0];

    my @data = split( m/\n/, $class->get_config() );

    my %config;
    my $feature;
    for (@data)
    {
        chomp;
        s/^\s+//;
        s/\s+$//;
        next unless ($_);
        if (/^\[(.*)\]$/i)
        {
            $feature = lc $1;
            $feature =~ s/\s+/_/g;
            next;
        }
        my $newopt = uc $_;
        $newopt =~ s/\s+/ /g;
        $config{$feature}{$newopt} = 1;
    }

    return \%config;
}

=head1 NAME

SQL::Dialects::Role - The role of being a SQL::Dialect

=head1 SYNOPSIS

    package My::SQL::Dialect;

    use SQL::Dialects::Role;

    sub get_config {
        return <<CONFIG;
    [SECTION]
    item1
    item2

    [ANOTHER SECTION]
    item1
    item2
    CONFIG
    }

=head1 DESCRIPTION

This adds the role of being a SQL::Dialect to your class.

=head2 Requirements

You must implement...

=head3 get_config

    my $config = $class->get_config;

Returns information about the dialect in an INI-like format.

=head2 Implements

The role implements...

=head3 get_config_as_hash

    my $config = $class->get_config_as_hash;

Returns the data represented in get_config() as a hash ref.

Items will be upper-cased, sections will be lower-cased.

The example in the SYNOPSIS would come back as...

    {
        section => {
            ITEM1       => 1,
            ITEM2       => 2,
        },
        another_section => {
            ITEM1       => 1,
            ITEM2       => 2,
        }
   }

=head1 AUTHOR & COPYRIGHT

 This module is

 copyright (c), 2009 by Michael G. Schwern
 copyright (c), 2009-2017 by Jens Rehsack.

 All rights reserved.

The module may be freely distributed under the same terms as
Perl itself using either the "GPL License" or the "Artistic
License" as specified in the Perl README file.

Jeff can be reached at: jzuckerATcpan.org
Jens can be reached at: rehsackATcpan.org or via dbi-devATperl.org

=head1 SEE ALSO

L<SQL::Parser/dialect()>

=cut