forked from HPR/hpr-tools
		
	Moved project directories and files to an empty local repo
This commit is contained in:
		
							
								
								
									
										134
									
								
								Database/query2json
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										134
									
								
								Database/query2json
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,134 @@ | ||||
| #!/usr/bin/env perl | ||||
| #=============================================================================== | ||||
| # | ||||
| #         FILE: query2json | ||||
| # | ||||
| #        USAGE: ./query2json query | ||||
| # | ||||
| #  DESCRIPTION: Runs a query given as the only argument. Caution is needed | ||||
| #               since *any* query will be run. The result of the query is | ||||
| #               output in JSON form on STDOUT. | ||||
| # | ||||
| #      OPTIONS: --- | ||||
| # REQUIREMENTS: --- | ||||
| #         BUGS: --- | ||||
| #        NOTES: Had to revert to MySQL because of a problem with DBD::MariaDB | ||||
| #       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com | ||||
| #      VERSION: 0.0.2 | ||||
| #      CREATED: 2021-06-18 13:24:49 | ||||
| #     REVISION: 2023-01-05 16:17:24 | ||||
| # | ||||
| #=============================================================================== | ||||
|  | ||||
| use 5.010; | ||||
| use strict; | ||||
| use warnings; | ||||
| use utf8; | ||||
|  | ||||
| use Config::General; | ||||
| use JSON; | ||||
| use DBI; | ||||
|  | ||||
| use Data::Dumper; | ||||
|  | ||||
| # | ||||
| # Version number (manually incremented) | ||||
| # | ||||
| our $VERSION = '0.0.2'; | ||||
|  | ||||
| # | ||||
| # Script and directory names | ||||
| # | ||||
| ( my $PROG = $0 ) =~ s|.*/||mx; | ||||
| ( my $DIR  = $0 ) =~ s|/?[^/]*$||mx; | ||||
| $DIR = '.' unless $DIR; | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Declarations | ||||
| #------------------------------------------------------------------------------- | ||||
| # | ||||
| # Constants and other declarations | ||||
| # | ||||
| my $basedir    = "$ENV{HOME}/HPR/Database"; | ||||
| my $configfile = "$basedir/.hpr_livedb.cfg"; | ||||
|  | ||||
| my ( $dbh, $sth1, $aref1 ); | ||||
| my ( $query, $result, $json ); | ||||
|  | ||||
| # | ||||
| # Enable Unicode mode | ||||
| # | ||||
| binmode STDOUT, ":encoding(UTF-8)"; | ||||
| binmode STDERR, ":encoding(UTF-8)"; | ||||
|  | ||||
| # | ||||
| # Load database configuration data | ||||
| # | ||||
| my $conf = Config::General->new( | ||||
|     -ConfigFile      => $configfile, | ||||
|     -InterPolateVars => 1, | ||||
|     -ExtendedAccess  => 1 | ||||
| ); | ||||
| my %config = $conf->getall(); | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Options and arguments | ||||
| #------------------------------------------------------------------------------- | ||||
| $query = shift; | ||||
| die "Usage: $PROG query\n" unless $query; | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Connect to the database | ||||
| #------------------------------------------------------------------------------- | ||||
| my $dbhost = $config{database}->{host} // '127.0.0.1'; | ||||
| my $dbport = $config{database}->{port} // 3306; | ||||
| my $dbname = $config{database}->{name}; | ||||
| my $dbuser = $config{database}->{user}; | ||||
| my $dbpwd  = $config{database}->{password}; | ||||
| #$dbh = DBI->connect( "DBI:MariaDB:host=$dbhost;port=$dbport;database=$dbname", | ||||
| #    $dbuser, $dbpwd, { AutoCommit => 1 } ) | ||||
| #    or die $DBI::errstr; | ||||
|  | ||||
| $dbh = DBI->connect( "dbi:mysql:host=$dbhost;port=$dbport;database=$dbname", | ||||
|     $dbuser, $dbpwd, { AutoCommit => 1 } ) | ||||
|     or die $DBI::errstr; | ||||
|  | ||||
| # | ||||
| # Enable client-side UTF8 | ||||
| # | ||||
| $dbh->{mysql_enable_utf8} = 1; | ||||
|  | ||||
| # | ||||
| # Set up the query | ||||
| # | ||||
| $sth1 = $dbh->prepare($query) or die $DBI::errstr; | ||||
| if ( $dbh->err ) { | ||||
|     warn $dbh->errstr; | ||||
| } | ||||
|  | ||||
| # | ||||
| # Perform the query | ||||
| # | ||||
| $sth1->execute; | ||||
| if ( $dbh->err ) { | ||||
|     warn $dbh->errstr; | ||||
| } | ||||
|  | ||||
| # | ||||
| # Grab everything as an arrayref of hashrefs | ||||
| # | ||||
| $result = $sth1->fetchall_arrayref( {} ); | ||||
|  | ||||
| # | ||||
| # Prepare for JSON, forcing object key sorting (expensive) | ||||
| # | ||||
| $json = JSON->new->utf8->canonical; | ||||
|  | ||||
| # | ||||
| # Encode the Perl structure to JSON | ||||
| # | ||||
| print $json->encode($result), "\n"; | ||||
|  | ||||
| exit; | ||||
|  | ||||
| # vim: syntax=perl:ts=8:sw=4:et:ai:tw=78:fo=tcrqn21:fdm=marker | ||||
		Reference in New Issue
	
	Block a user