Skip to content

Instantly share code, notes, and snippets.

@PedroHLC
Created December 2, 2018 19:37
Show Gist options
  • Save PedroHLC/d61b85d8cac6aed8b868bb1dae531390 to your computer and use it in GitHub Desktop.
Save PedroHLC/d61b85d8cac6aed8b868bb1dae531390 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
# Gerador de INSERTs para trabalho de BD
# Instale dependencias:
# gem install --user-install laranja
# Como usar:
# ruby gera.rb > dummy.sql
# ruby gera.rb 10 5 3 5 2 > dummy-menor.sql
require 'laranja'
Laranja.load('pt-BR')
lim_br = (ARGV[0].nil? || ARGV[0].to_i < 1) ? 120 : ARGV[0].to_i
lim_gr = (ARGV[1].nil? || ARGV[1].to_i < 1) ? 20 : ARGV[1].to_i
lim_e = (ARGV[2].nil? || ARGV[2].to_i < 1) ? 12 : ARGV[2].to_i
lim_insc = (ARGV[3].nil? || ARGV[3].to_i < 1) ? 30 : ARGV[3].to_i
lim_conv = (ARGV[4].nil? || ARGV[4].to_i < 1) ? 5 : ARGV[4].to_i
class Candidato
attr_reader :nome, :cpf, :email, :sexo, :cep, :bairro, :rua, :num, :compl, :ddi, :ddd, :fixo, :rg, :passaporte
def initialize
@nome = Laranja::Nome.nome
@cpf = Laranja::Documento.cpf
@rg = Laranja::Documento.rg
@passaporte = 1+(rand 999999).to_i
@email = Laranja::Internet.email(@nome)
@sexo = Laranja::Sexo.sexo
@cep = Laranja::Endereco.cep
@bairro = Laranja::Endereco.bairro
@rua = Laranja::Endereco.rua
@num = Laranja::Endereco.numero
@compl = Laranja::Endereco.complemento
@ddi = 50
@ddd = 1+(rand 98).to_i
@fixo = 300000+(rand % 499999).to_i
end
def nome_pr
return @nome.split(' ')[0...-1].join(' ')
end
def nome_ul
return @nome.split(' ')[-1]
end
end
def algum_dia
return "TO_DATE('#{1990 + (rand 28).to_i}-#{1 + (rand 11).to_i}-#{1 + (rand 27).to_i}', 'yyyy-mm-dd')"
end
def futuro
return "TO_DATE('#{2018 + (rand 3).to_i}-#{1 + (rand 11).to_i}-#{1 + (rand 27).to_i}', 'yyyy-mm-dd')"
end
$us_firstname = ['Alexander', 'Anthony', 'Jonathan', 'Bill', 'Donald', 'Alex', 'Mary', 'Peter', 'Jennifer', 'Kath']
$us_surname = ['Smith', 'Johnson', 'Williams', 'Jones', 'Brown', 'Davis', 'Miller', 'Wilson', 'Moore']
class Gringo < Candidato
def initialize
super()
@nome = $us_firstname.sample + ' ' + $us_surname.sample
@email = Laranja::Internet.email(@nome)
@rg = nil
@cpf = nil
end
end
negos = {}
for i in 0..(lim_br-1)
n = Candidato.new
negos[i] = n
end
for i in lim_br..(lim_br+lim_gr)
n = Gringo.new
negos[i] = n
end
$paises = ['Afghanistan', 'Albania', 'Algeria', 'American Samoa', 'Andorra', 'Angola', 'Anguilla', 'Antarctica', 'Antigua and Barbuda', 'Argentina', 'Armenia', 'Aruba', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bermuda', 'Bhutan', 'Bolivia', 'Bosnia and Herzegowina', 'Botswana', 'Bouvet Island', 'Brazil', 'British Indian Ocean Territory', 'Brunei Darussalam', 'Bulgaria', 'Burkina Faso', 'Burundi', 'Cambodia', 'Cameroon', 'Canada', 'Cape Verde', 'Cayman Islands', 'Central African Republic', 'Chad', 'Chile', 'China', 'Christmas Island', 'Cocos (Keeling) Islands', 'Colombia', 'Comoros', 'Congo', 'Congo, the Democratic Republic of the', 'Cook Islands', 'Costa Rica', 'Cote d Ivoire', 'Croatia (Hrvatska)', 'Cuba', 'Cyprus', 'Czech Republic', 'Denmark', 'Djibouti', 'Dominica', 'Dominican Republic', 'East Timor', 'Ecuador', 'Egypt', 'El Salvador', 'Equatorial Guinea', 'Eritrea', 'Estonia', 'Ethiopia', 'Falkland Islands (Malvinas)', 'Faroe Islands', 'Fiji', 'Finland', 'France', 'France Metropolitan', 'French Guiana', 'French Polynesia', 'French Southern Territories', 'Gabon', 'Gambia', 'Georgia', 'Germany', 'Ghana', 'Gibraltar', 'Greece', 'Greenland', 'Grenada', 'Guadeloupe', 'Guam', 'Guatemala', 'Guinea', 'Guinea-Bissau', 'Guyana', 'Haiti', 'Heard and Mc Donald Islands', 'Holy See (Vatican City State)', 'Honduras', 'Hong Kong', 'Hungary', 'Iceland', 'India', 'Indonesia', 'Iran (Islamic Republic of)', 'Iraq', 'Ireland', 'Israel', 'Italy', 'Jamaica', 'Japan', 'Jordan', 'Kazakhstan', 'Kenya', 'Kiribati', 'Korea, Democratic People s Republic of', 'Korea, Republic of', 'Kuwait', 'Kyrgyzstan', 'Lao, People s Democratic Republic', 'Latvia', 'Lebanon', 'Lesotho', 'Liberia', 'Libyan Arab Jamahiriya', 'Liechtenstein', 'Lithuania', 'Luxembourg', 'Macau', 'Macedonia, The Former Yugoslav Republic of', 'Madagascar', 'Malawi', 'Malaysia', 'Maldives', 'Mali', 'Malta', 'Marshall Islands', 'Martinique', 'Mauritania', 'Mauritius', 'Mayotte', 'Mexico', 'Micronesia, Federated States of', 'Moldova, Republic of', 'Monaco', 'Mongolia', 'Montserrat', 'Morocco', 'Mozambique', 'Myanmar', 'Namibia', 'Nauru', 'Nepal', 'Netherlands', 'Netherlands Antilles', 'New Caledonia', 'New Zealand', 'Nicaragua', 'Niger', 'Nigeria', 'Niue', 'Norfolk Island', 'Northern Mariana Islands', 'Norway', 'Oman', 'Pakistan', 'Palau', 'Panama', 'Papua New Guinea', 'Paraguay', 'Peru', 'Philippines', 'Pitcairn', 'Poland', 'Portugal', 'Puerto Rico', 'Qatar', 'Reunion', 'Romania', 'Russian Federation', 'Rwanda', 'Saint Kitts and Nevis', 'Saint Lucia', 'Saint Vincent and the Grenadines', 'Samoa', 'San Marino', 'Sao Tome and Principe', 'Saudi Arabia', 'Senegal', 'Seychelles', 'Sierra Leone', 'Singapore', 'Slovakia (Slovak Republic)', 'Slovenia', 'Solomon Islands', 'Somalia', 'South Africa', 'South Georgia and the South Sandwich Islands', 'Spain', 'Sri Lanka', 'St. Helena', 'St. Pierre and Miquelon', 'Sudan', 'Suriname', 'Svalbard and Jan Mayen Islands', 'Swaziland', 'Sweden', 'Switzerland', 'Syrian Arab Republic', 'Taiwan, Province of China', 'Tajikistan', 'Tanzania, United Republic of', 'Thailand', 'Togo', 'Tokelau', 'Tonga', 'Trinidad and Tobago', 'Tunisia', 'Turkey', 'Turkmenistan', 'Turks and Caicos Islands', 'Tuvalu', 'Uganda', 'Ukraine', 'United Arab Emirates', 'United Kingdom', 'United States', 'United States Minor Outlying Islands', 'Uruguay', 'Uzbekistan', 'Vanuatu', 'Venezuela', 'Vietnam', 'Virgin Islands (British)', 'Virgin Islands (U.S.)', 'Wallis and Futuna Islands', 'Western Sahara', 'Yemen', 'Yugoslavia', 'Zambia', 'Zimbabwe']
puts "-- INSCRITOS"
negos.each_pair do |k, n|
puts "INSERT INTO Candidato VALUES (#{k}, '#{n.nome_pr}', '#{n.nome_ul}', '#{n.sexo}', #{n.cep}, '#{n.bairro}', '#{n.rua}', #{n.num.to_i}, '#{n.compl}', 55, #{n.ddd}, #{n.fixo}, NULL, NULL, NULL);"
puts "INSERT INTO Candidato_Email VALUES (#{k}, '#{n.email}');"
if n.rg.nil?
puts "INSERT INTO CandidatoEstrangeiro VALUES (#{n.passaporte}, '#{$paises.sample}', #{algum_dia}, #{k});"
else
puts "INSERT INTO CandidatoBrasileiro VALUES (#{n.cpf}, #{k}, 0, #{algum_dia}, 'EB', #{n.rg}, #{algum_dia}, 'SSP');"
end
end
$discs = ['Construção de Algoritmos e Programação', 'Orientação Profissional em Computação', 'Geometria Analítica', 'Cálculo 1', 'Fundamentos de Física para a Computação', 'Introdução à Lógica', 'Programação de Computadores', 'Circuitos Digitais', 'Laboratório de Circuitos Digitais', 'Cálculo Diferencial e Séries', 'Introdução à Probabilidade 1', 'Álgebra Linear 1', 'Estruturas Discretas', 'Optativa da área de Humanas', 'Estruturas de Dados', 'Introdução aos Sistemas de Informação', 'Arquitetura e Organização de Computadores 1', 'Laboratório de Arquitetura e Organização de Computadores 1', 'Cálculo Numérico', 'Optativa da área de Humanas', 'Optativa Complementar', 'Linguagens Formais e Autômatos', 'Organização e Recuperação da Informação', 'Projeto e Análise de Algoritmos', 'Banco de Dados', 'Engenharia de Software 1', 'Arquitetura e Organização de Computadores 2', 'Laboratório de Arquitetura e Organização de Computadores 2', 'Teoria dos Grafos', 'Laboratório de Banco de Dados', 'Paradigmas de Linguagens de Programação', 'Sistemas Operacionais 1', 'Construção de Compiladores 1', 'Engenharia de Software 2', 'Administração de Empresas 1', 'Projeto Acadêmico em Computação', 'Optativa Complementar', 'Inteligência Artificial', 'Sistemas Operacionais 2', 'Metodologia de Desenvolvimento de Sistemas 1', 'Redes de Computadores', 'Construção de Compiladores 2', 'Computação Gráfica e Multimídia', 'Optativa Profissionalizante', 'Sistemas Distribuídos', 'Desenvolvimento de Software para a Web', 'Optativa Complementar', 'Optativas Profissionalizantes', 'Atividades Complementares', 'Seminários em Computação', 'Estágio em Computação', 'Trabalho de Graduação', 'Inglês Instrumental para Computação 1', 'Inglês Instrumental para Computação 2', 'Comunicação e Expressão', 'Introdução à Sociologia Geral', 'Sociologia Industrial e do Trabalho', 'Tecnologia e Sociedade', 'História das Revoluções Modernas', 'Economia Geral', 'Economia da Empresa', 'Métodos e Técnicas de Pesquisa', 'Filosofia da Ciência', 'Noções Gerais de Direito', 'Teoria das Organizações', 'Microeconomia', 'Tópicos Avançados A', 'Tópicos Avançados B', 'Matemática Computacional', 'Circuitos Reconfiguráveis', 'Projeto de Banco de Dados', 'Tópicos em Informática', 'Tópicos em Informática 2', 'Sistemas de Tempo Real', 'Planejamento e Gerenciamento de Sistemas de Informação', 'Empreendedores em Informática', 'Tópicos em Informática 3', 'Tópicos em Informática 4', 'Projeto e Manufatura Assistidos Por Computador', 'Microcontroladores e Aplicações', 'Laboratório Microcontroladores e Aplicações', 'Tecnologia e Comunicação de Dados', 'Arquiteturas de Sistemas Computacionais de Alto Desempenho', 'Análise de Desempenho de Sistemas Computacionais', 'Introdução à Bioinformática', 'Empreendedorismo e Desenvolvimento de Negócios', 'Metodologia Científica e Gerenciamento de Projetos', 'Teoria dos Jogos']
class Edital
attr_reader :ano, :num, :remun, :vgs, :disc, :coord, :curso
def initialize(ano, num)
@ano = ano
@num = num
@remun = 'Anual: R$ '+(1 + (rand 3).to_i).to_s+'000,00'
@vgs = 1 + (rand 30).to_i
@disc = $discs.sample
@coord = Laranja::Nome.nome
@curso = ['BCC','EnC'].sample
end
end
editais = {}
for ano in 2016..2018
for numero_sequencial in 1..(lim_e)
s = Edital.new(ano, numero_sequencial)
editais[[ano, numero_sequencial]] = s
end
end
puts "-- EDITAIS"
editais.each_pair do |k,e|
puts "INSERT INTO Edital VALUES (#{e.ano}, #{e.num}, '#{e.remun}', #{e.vgs}, #{futuro}, NULL, NULL);"
puts "INSERT INTO EditalTutorVirtual VALUES (#{e.ano}, #{e.num});"
puts "INSERT INTO EditalTutorVirtual_Curso VALUES (#{e.ano}, #{e.num}, '#{e.curso}', '#{e.coord}');"
puts "INSERT INTO EditalTutorVirtual_Curso_Disciplina VALUES (#{e.ano}, #{e.num}, '#{e.curso}', '#{e.coord}', '#{e.disc}');"
end
inscricoes = {}
editais.each_pair do |k, v|
insc = negos.keys.sample(lim_insc)
convc = insc.sample(lim_conv)
efetivado = convc.sample
inscricoes[k] = [insc, convc, efetivado]
end
def algum_bloco
return (0...2).map { (65 + rand(26)).chr }.join
end
puts "-- INSCRICOES"
inscricoes.each_pair do |k, v|
v[0].each do |c|
puts "INSERT INTO Inscricao VALUES (#{c}, #{k[0]}, #{k[1]}, #{futuro}, NULL, 'Indeferido');"
end
v[1].each do |c|
puts "INSERT INTO Convocacao VALUES (#{c}, #{k[0]}, #{k[1]}, #{algum_dia}, NULL, '#{algum_bloco}');"
end
c = v[2]
puts "INSERT INTO Efetivado VALUES (#{c}, #{k[0]}, #{k[1]}, #{algum_dia}, #{futuro});"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment